std::ffi::OsString - Rust
Description: API documentation for the Rust `OsString` struct in crate `std`.
Keywords: rust, rustlang, rust-lang, OsString

# 1.0.0[−][src]Struct std::ffi::OsString

    pub struct OsString { /* fields omitted */ }

A type that can represent owned, mutable platform-native strings, but is cheaply inter-convertible with Rust strings.

The need for this type arises from the fact that:

- On Unix systems, strings are often arbitrary sequences of non-zero bytes, in many cases interpreted as UTF-8.

- On Windows, strings are often arbitrary sequences of non-zero 16-bit values, interpreted as UTF-16 when it is valid to do so.

- In Rust, strings are always valid UTF-8, which may contain zeros.

`OsString` and `OsStr` bridge this gap by simultaneously representing Rust and platform-native string values, and in particular allowing a Rust string to be converted into an "OS" string with no cost if possible. A consequence of this is that `OsString` instances are not `NUL` terminated; in order to pass to e.g., Unix system call, you should create a `CStr`.

`OsString` is to `&OsStr` as `String` is to `&str`: the former in each pair are owned strings; the latter are borrowed references.

Note, `OsString` and `OsStr` internally do not necessarily hold strings in the form native to the platform; While on Unix, strings are stored as a sequence of 8-bit values, on Windows, where strings are 16-bit value based as just discussed, strings are also actually stored as a sequence of 8-bit values, encoded in a less-strict variant of UTF-8. This is useful to understand when handling capacity and length values.

# Creating an `OsString`

From a Rust string: `OsString` implements `From``<``String``>`, so you can use `my_string.from` to create an `OsString` from a normal Rust string.

From slices: Just like you can start with an empty Rust `String` and then `push_str` `&str` sub-string slices into it, you can create an empty `OsString` with the `new` method and then push string slices into it with the `push` method.

# Extracting a borrowed reference to the whole OS string

You can use the `as_os_str` method to get an `&``OsStr` from an `OsString`; this is effectively a borrowed reference to the whole string.

# Conversions

See the module's toplevel documentation about conversions for a discussion on the traits which `OsString` implements for conversions from/to native representations.

## Methods

### `impl OsString`[src]

#### `pub fn new() -> OsString`[src]

Constructs a new empty `OsString`.

# Examples

    use std::ffi::OsString;

    let os_string = OsString::new();Run

#### `pub fn as_os_str(&self) -> &OsStr`[src]

Converts to an `OsStr` slice.

# Examples

    use std::ffi::{OsString, OsStr};

    let os_string = OsString::from("foo");
    let os_str = OsStr::new("foo");
    assert_eq!(os_string.as_os_str(), os_str);Run

#### `pub fn into_string(self) -> Result<String, OsString>`[src]

Converts the `OsString` into a `String` if it contains valid Unicode data.

On failure, ownership of the original `OsString` is returned.

# Examples

    use std::ffi::OsString;

    let os_string = OsString::from("foo");
    let string = os_string.into_string();
    assert_eq!(string, Ok(String::from("foo")));Run

#### `pub fn push<T: AsRef<OsStr>>(&mut self, s: T)`[src]

Extends the string with the given `&OsStr` slice.

# Examples

    use std::ffi::OsString;

    let mut os_string = OsString::from("foo");
    os_string.push("bar");
    assert_eq!(&os_string, "foobar");Run

#### `pub fn with_capacity(capacity: usize) -> OsString`1.9.0[src]

Creates a new `OsString` with the given capacity.

The string will be able to hold exactly `capacity` length units of other OS strings without reallocating. If `capacity` is 0, the string will not allocate.

See main `OsString` documentation information about encoding.

# Examples

    use std::ffi::OsString;

    let mut os_string = OsString::with_capacity(10);
    let capacity = os_string.capacity();

    // This push is done without reallocating
    os_string.push("foo");

    assert_eq!(capacity, os_string.capacity());Run

#### `pub fn clear(&mut self)`1.9.0[src]

Truncates the `OsString` to zero length.

# Examples

    use std::ffi::OsString;

    let mut os_string = OsString::from("foo");
    assert_eq!(&os_string, "foo");

    os_string.clear();
    assert_eq!(&os_string, "");Run

#### `pub fn capacity(&self) -> usize`1.9.0[src]

Returns the capacity this `OsString` can hold without reallocating.

See `OsString` introduction for information about encoding.

# Examples

    use std::ffi::OsString;

    let mut os_string = OsString::with_capacity(10);
    assert!(os_string.capacity() >= 10);Run

#### `pub fn reserve(&mut self, additional: usize)`1.9.0[src]

Reserves capacity for at least `additional` more capacity to be inserted in the given `OsString`.

The collection may reserve more space to avoid frequent reallocations.

# Examples

    use std::ffi::OsString;

    let mut s = OsString::new();
    s.reserve(10);
    assert!(s.capacity() >= 10);Run

#### `pub fn reserve_exact(&mut self, additional: usize)`1.9.0[src]

Reserves the minimum capacity for exactly `additional` more capacity to be inserted in the given `OsString`. Does nothing if the capacity is already sufficient.

Note that the allocator may give the collection more space than it requests. Therefore, capacity can not be relied upon to be precisely minimal. Prefer reserve if future insertions are expected.

# Examples

    use std::ffi::OsString;

    let mut s = OsString::new();
    s.reserve_exact(10);
    assert!(s.capacity() >= 10);Run

#### `pub fn shrink_to_fit(&mut self)`1.19.0[src]

Shrinks the capacity of the `OsString` to match its length.

# Examples

    use std::ffi::OsString;

    let mut s = OsString::from("foo");

    s.reserve(100);
    assert!(s.capacity() >= 100);

    s.shrink_to_fit();
    assert_eq!(3, s.capacity());Run

#### `pub fn shrink_to(&mut self, min_capacity: usize)`[src]

🔬 This is a nightly-only experimental API. (`shrink_to` #56431)

new API

Shrinks the capacity of the `OsString` with a lower bound.

The capacity will remain at least as large as both the length and the supplied value.

Panics if the current capacity is smaller than the supplied minimum capacity.

# Examples

    #![feature(shrink_to)]
    use std::ffi::OsString;

    let mut s = OsString::from("foo");

    s.reserve(100);
    assert!(s.capacity() >= 100);

    s.shrink_to(10);
    assert!(s.capacity() >= 10);
    s.shrink_to(0);
    assert!(s.capacity() >= 3);Run

####
ⓘImportant traits for Box<F>

### Important traits for Box<F>

`impl<F> Future for Box<F> where
F: Unpin + Future + ?Sized, type Output = <F as Future>::Output;impl<I> Iterator for Box<I> where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<R: Read + ?Sized> Read for Box<R>impl<W: Write + ?Sized> Write for Box<W>`
`pub fn into_boxed_os_str(self) -> Box<OsStr>`1.20.0[src]

Converts this `OsString` into a boxed `OsStr`.

# Examples

    use std::ffi::{OsString, OsStr};

    let s = OsString::from("hello");

    let b: Box<OsStr> = s.into_boxed_os_str();Run

## Methods from Deref<Target = OsStr>

#### `pub fn to_str(&self) -> Option<&str>`[src]

Yields a `&str` slice if the `OsStr` is valid Unicode.

This conversion may entail doing a check for UTF-8 validity.

# Examples

    use std::ffi::OsStr;

    let os_str = OsStr::new("foo");
    assert_eq!(os_str.to_str(), Some("foo"));Run

#### `pub fn to_string_lossy(&self) -> Cow<str>`[src]

Converts an `OsStr` to a `Cow``<``str``>`.

Any non-Unicode sequences are replaced with `U+FFFD REPLACEMENT CHARACTER`.

# Examples

Calling `to_string_lossy` on an `OsStr` with invalid unicode:

    // Note, due to differences in how Unix and Windows represent strings,
    // we are forced to complicate this example, setting up example `OsStr`s
    // with different source data and via different platform extensions.
    // Understand that in reality you could end up with such example invalid
    // sequences simply through collecting user command line arguments, for
    // example.

    #[cfg(any(unix, target_os = "redox"))] {
        use std::ffi::OsStr;
        use std::os::unix::ffi::OsStrExt;

        // Here, the values 0x66 and 0x6f correspond to 'f' and 'o'
        // respectively. The value 0x80 is a lone continuation byte, invalid
        // in a UTF-8 sequence.
        let source = [0x66, 0x6f, 0x80, 0x6f];
        let os_str = OsStr::from_bytes(&source[..]);

        assert_eq!(os_str.to_string_lossy(), "fo�o");
    }
    #[cfg(windows)] {
        use std::ffi::OsString;
        use std::os::windows::prelude::*;

        // Here the values 0x0066 and 0x006f correspond to 'f' and 'o'
        // respectively. The value 0xD800 is a lone surrogate half, invalid
        // in a UTF-16 sequence.
        let source = [0x0066, 0x006f, 0xD800, 0x006f];
        let os_string = OsString::from_wide(&source[..]);
        let os_str = os_string.as_os_str();

        assert_eq!(os_str.to_string_lossy(), "fo�o");
    }Run

#### `pub fn to_os_string(&self) -> OsString`[src]

Copies the slice into an owned `OsString`.

# Examples

    use std::ffi::{OsStr, OsString};

    let os_str = OsStr::new("foo");
    let os_string = os_str.to_os_string();
    assert_eq!(os_string, OsString::from("foo"));Run

#### `pub fn is_empty(&self) -> bool`1.9.0[src]

Checks whether the `OsStr` is empty.

# Examples

    use std::ffi::OsStr;

    let os_str = OsStr::new("");
    assert!(os_str.is_empty());

    let os_str = OsStr::new("foo");
    assert!(!os_str.is_empty());Run

#### `pub fn len(&self) -> usize`1.9.0[src]

Returns the length of this `OsStr`.

Note that this does not return the number of bytes in the string in OS string form.

The length returned is that of the underlying storage used by `OsStr`; As discussed in the `OsString` introduction, `OsString` and `OsStr` store strings in a form best suited for cheap inter-conversion between native-platform and Rust string forms, which may differ significantly from both of them, including in storage size and encoding.

This number is simply useful for passing to other methods, like `OsString::with_capacity` to avoid reallocations.

# Examples

    use std::ffi::OsStr;

    let os_str = OsStr::new("");
    assert_eq!(os_str.len(), 0);

    let os_str = OsStr::new("foo");
    assert_eq!(os_str.len(), 3);Run

## Trait Implementations

### `impl OsStringExt for OsString`[src]

#### `fn from_vec(vec: Vec<u8>) -> OsString`[src]

This is supported on Unix only.

Creates an [`OsString`] from a byte vector. Read more

####
ⓘImportant traits for Vec<u8>

### Important traits for Vec<u8>

`impl Write for Vec<u8>`
`fn into_vec(self) -> Vec<u8>`[src]

This is supported on Unix only.

Yields the underlying byte vector of this [`OsString`]. Read more

### `impl OsStringExt for OsString`[src]

#### `fn from_wide(wide: &[u16]) -> OsString`[src]

This is supported on Windows only.

Creates an `OsString` from a potentially ill-formed UTF-16 slice of 16-bit code units. Read more

### `impl Clone for OsString`[src]

#### `fn clone(&self) -> OsString`[src]

Returns a copy of the value. Read more

#### `fn clone_from(&mut self, source: &Self)`[src]

Performs copy-assignment from `source`. Read more

### `impl Debug for OsString`[src]

#### `fn fmt(&self, formatter: &mut Formatter) -> Result`[src]

Formats the value using the given formatter. Read more

### `impl PartialEq<OsString> for OsString`[src]

#### `fn eq(&self, other: &OsString) -> bool`[src]

This method tests for `self` and `other` values to be equal, and is used by `==`. Read more

#### `
#[must_use]
fn ne(&self, other: &Rhs) -> bool`[src]

This method tests for `!=`.

### `impl PartialEq<str> for OsString`[src]

#### `fn eq(&self, other: &str) -> bool`[src]

This method tests for `self` and `other` values to be equal, and is used by `==`. Read more

#### `
#[must_use]
fn ne(&self, other: &Rhs) -> bool`[src]

This method tests for `!=`.

### `impl PartialEq<OsString> for str`[src]

#### `fn eq(&self, other: &OsString) -> bool`[src]

This method tests for `self` and `other` values to be equal, and is used by `==`. Read more

#### `
#[must_use]
fn ne(&self, other: &Rhs) -> bool`[src]

This method tests for `!=`.

### `impl<'_> PartialEq<&'_ str> for OsString` 1.29.0[src]

#### `fn eq(&self, other: &&str) -> bool`[src]

This method tests for `self` and `other` values to be equal, and is used by `==`. Read more

#### `
#[must_use]
fn ne(&self, other: &Rhs) -> bool`[src]

This method tests for `!=`.

### `impl<'a> PartialEq<OsString> for &'a str` 1.29.0[src]

#### `fn eq(&self, other: &OsString) -> bool`[src]

This method tests for `self` and `other` values to be equal, and is used by `==`. Read more

#### `
#[must_use]
fn ne(&self, other: &Rhs) -> bool`[src]

This method tests for `!=`.

### `impl<'a, 'b> PartialEq<OsStr> for OsString` 1.8.0[src]

#### `fn eq(&self, other: &OsStr) -> bool`[src]

This method tests for `self` and `other` values to be equal, and is used by `==`. Read more

#### `
#[must_use]
fn ne(&self, other: &Rhs) -> bool`[src]

This method tests for `!=`.

### `impl<'a, 'b> PartialEq<OsString> for OsStr` 1.8.0[src]

#### `fn eq(&self, other: &OsString) -> bool`[src]

This method tests for `self` and `other` values to be equal, and is used by `==`. Read more

#### `
#[must_use]
fn ne(&self, other: &Rhs) -> bool`[src]

This method tests for `!=`.

### `impl<'a, 'b> PartialEq<&'a OsStr> for OsString` 1.8.0[src]

#### `fn eq(&self, other: &&'a OsStr) -> bool`[src]

This method tests for `self` and `other` values to be equal, and is used by `==`. Read more

#### `
#[must_use]
fn ne(&self, other: &Rhs) -> bool`[src]

This method tests for `!=`.

### `impl<'a, 'b> PartialEq<OsString> for &'a OsStr` 1.8.0[src]

#### `fn eq(&self, other: &OsString) -> bool`[src]

This method tests for `self` and `other` values to be equal, and is used by `==`. Read more

#### `
#[must_use]
fn ne(&self, other: &Rhs) -> bool`[src]

This method tests for `!=`.

### `impl<'a, 'b> PartialEq<OsString> for Cow<'a, OsStr>`1.8.0[src]

#### `fn eq(&self, other: &OsString) -> bool`[src]

This method tests for `self` and `other` values to be equal, and is used by `==`. Read more

#### `
#[must_use]
fn ne(&self, other: &Rhs) -> bool`[src]

This method tests for `!=`.

### `impl<'a, 'b> PartialEq<Cow<'a, OsStr>> for OsString` 1.8.0[src]

#### `fn eq(&self, other: &Cow<'a, OsStr>) -> bool`[src]

This method tests for `self` and `other` values to be equal, and is used by `==`. Read more

#### `
#[must_use]
fn ne(&self, other: &Rhs) -> bool`[src]

This method tests for `!=`.

### `impl<'a, 'b> PartialEq<OsString> for PathBuf` 1.8.0[src]

#### `fn eq(&self, other: &OsString) -> bool`[src]

This method tests for `self` and `other` values to be equal, and is used by `==`. Read more

#### `
#[must_use]
fn ne(&self, other: &Rhs) -> bool`[src]

This method tests for `!=`.

### `impl<'a, 'b> PartialEq<PathBuf> for OsString` 1.8.0[src]

#### `fn eq(&self, other: &PathBuf) -> bool`[src]

This method tests for `self` and `other` values to be equal, and is used by `==`. Read more

#### `
#[must_use]
fn ne(&self, other: &Rhs) -> bool`[src]

This method tests for `!=`.

### `impl<'a, 'b> PartialEq<OsString> for Path` 1.8.0[src]

#### `fn eq(&self, other: &OsString) -> bool`[src]

This method tests for `self` and `other` values to be equal, and is used by `==`. Read more

#### `
#[must_use]
fn ne(&self, other: &Rhs) -> bool`[src]

This method tests for `!=`.

### `impl<'a, 'b> PartialEq<Path> for OsString` 1.8.0[src]

#### `fn eq(&self, other: &Path) -> bool`[src]

This method tests for `self` and `other` values to be equal, and is used by `==`. Read more

#### `
#[must_use]
fn ne(&self, other: &Rhs) -> bool`[src]

This method tests for `!=`.

### `impl<'a, 'b> PartialEq<OsString> for &'a Path` 1.8.0[src]

#### `fn eq(&self, other: &OsString) -> bool`[src]

This method tests for `self` and `other` values to be equal, and is used by `==`. Read more

#### `
#[must_use]
fn ne(&self, other: &Rhs) -> bool`[src]

This method tests for `!=`.

### `impl<'a, 'b> PartialEq<&'a Path> for OsString` 1.8.0[src]

#### `fn eq(&self, other: &&'a Path) -> bool`[src]

This method tests for `self` and `other` values to be equal, and is used by `==`. Read more

#### `
#[must_use]
fn ne(&self, other: &Rhs) -> bool`[src]

This method tests for `!=`.

### `impl<'a, 'b> PartialEq<OsString> for Cow<'a, Path>`1.8.0[src]

#### `fn eq(&self, other: &OsString) -> bool`[src]

This method tests for `self` and `other` values to be equal, and is used by `==`. Read more

#### `
#[must_use]
fn ne(&self, other: &Rhs) -> bool`[src]

This method tests for `!=`.

### `impl<'a, 'b> PartialEq<Cow<'a, Path>> for OsString` 1.8.0[src]

#### `fn eq(&self, other: &Cow<'a, Path>) -> bool`[src]

This method tests for `self` and `other` values to be equal, and is used by `==`. Read more

#### `
#[must_use]
fn ne(&self, other: &Rhs) -> bool`[src]

This method tests for `!=`.

### `impl Eq for OsString`[src]

### `impl Ord for OsString`[src]

#### `fn cmp(&self, other: &OsString) -> Ordering`[src]

This method returns an `Ordering` between `self` and `other`. Read more

#### `fn max(self, other: Self) -> Self`1.21.0[src]

Compares and returns the maximum of two values. Read more

#### `fn min(self, other: Self) -> Self`1.21.0[src]

Compares and returns the minimum of two values. Read more

#### `fn clamp(self, min: Self, max: Self) -> Self`[src]

🔬 This is a nightly-only experimental API. (`clamp` #44095)

Restrict a value to a certain interval. Read more

### `impl PartialOrd<OsString> for OsString`[src]

#### `fn partial_cmp(&self, other: &OsString) -> Option<Ordering>`[src]

This method returns an ordering between `self` and `other` values if one exists. Read more

#### `fn lt(&self, other: &OsString) -> bool`[src]

This method tests less than (for `self` and `other`) and is used by the `<` operator. Read more

#### `fn le(&self, other: &OsString) -> bool`[src]

This method tests less than or equal to (for `self` and `other`) and is used by the `<=` operator. Read more

#### `fn gt(&self, other: &OsString) -> bool`[src]

This method tests greater than (for `self` and `other`) and is used by the `>` operator. Read more

#### `fn ge(&self, other: &OsString) -> bool`[src]

This method tests greater than or equal to (for `self` and `other`) and is used by the `>=` operator. Read more

### `impl PartialOrd<str> for OsString`[src]

#### `fn partial_cmp(&self, other: &str) -> Option<Ordering>`[src]

This method returns an ordering between `self` and `other` values if one exists. Read more

#### `
#[must_use]
fn lt(&self, other: &Rhs) -> bool`[src]

This method tests less than (for `self` and `other`) and is used by the `<` operator. Read more

#### `
#[must_use]
fn le(&self, other: &Rhs) -> bool`[src]

This method tests less than or equal to (for `self` and `other`) and is used by the `<=` operator. Read more

#### `
#[must_use]
fn gt(&self, other: &Rhs) -> bool`[src]

This method tests greater than (for `self` and `other`) and is used by the `>` operator. Read more

#### `
#[must_use]
fn ge(&self, other: &Rhs) -> bool`[src]

This method tests greater than or equal to (for `self` and `other`) and is used by the `>=` operator. Read more

### `impl<'a, 'b> PartialOrd<OsStr> for OsString` 1.8.0[src]

#### `fn partial_cmp(&self, other: &OsStr) -> Option<Ordering>`[src]

This method returns an ordering between `self` and `other` values if one exists. Read more

#### `
#[must_use]
fn lt(&self, other: &Rhs) -> bool`[src]

This method tests less than (for `self` and `other`) and is used by the `<` operator. Read more

#### `
#[must_use]
fn le(&self, other: &Rhs) -> bool`[src]

This method tests less than or equal to (for `self` and `other`) and is used by the `<=` operator. Read more

#### `
#[must_use]
fn gt(&self, other: &Rhs) -> bool`[src]

This method tests greater than (for `self` and `other`) and is used by the `>` operator. Read more

#### `
#[must_use]
fn ge(&self, other: &Rhs) -> bool`[src]

This method tests greater than or equal to (for `self` and `other`) and is used by the `>=` operator. Read more

### `impl<'a, 'b> PartialOrd<OsString> for OsStr` 1.8.0[src]

#### `fn partial_cmp(&self, other: &OsString) -> Option<Ordering>`[src]

This method returns an ordering between `self` and `other` values if one exists. Read more

#### `
#[must_use]
fn lt(&self, other: &Rhs) -> bool`[src]

This method tests less than (for `self` and `other`) and is used by the `<` operator. Read more

#### `
#[must_use]
fn le(&self, other: &Rhs) -> bool`[src]

This method tests less than or equal to (for `self` and `other`) and is used by the `<=` operator. Read more

#### `
#[must_use]
fn gt(&self, other: &Rhs) -> bool`[src]

This method tests greater than (for `self` and `other`) and is used by the `>` operator. Read more

#### `
#[must_use]
fn ge(&self, other: &Rhs) -> bool`[src]

This method tests greater than or equal to (for `self` and `other`) and is used by the `>=` operator. Read more

### `impl<'a, 'b> PartialOrd<&'a OsStr> for OsString` 1.8.0[src]

#### `fn partial_cmp(&self, other: &&'a OsStr) -> Option<Ordering>`[src]

This method returns an ordering between `self` and `other` values if one exists. Read more

#### `
#[must_use]
fn lt(&self, other: &Rhs) -> bool`[src]

This method tests less than (for `self` and `other`) and is used by the `<` operator. Read more

#### `
#[must_use]
fn le(&self, other: &Rhs) -> bool`[src]

This method tests less than or equal to (for `self` and `other`) and is used by the `<=` operator. Read more

#### `
#[must_use]
fn gt(&self, other: &Rhs) -> bool`[src]

This method tests greater than (for `self` and `other`) and is used by the `>` operator. Read more

#### `
#[must_use]
fn ge(&self, other: &Rhs) -> bool`[src]

This method tests greater than or equal to (for `self` and `other`) and is used by the `>=` operator. Read more

### `impl<'a, 'b> PartialOrd<OsString> for &'a OsStr` 1.8.0[src]

#### `fn partial_cmp(&self, other: &OsString) -> Option<Ordering>`[src]

This method returns an ordering between `self` and `other` values if one exists. Read more

#### `
#[must_use]
fn lt(&self, other: &Rhs) -> bool`[src]

This method tests less than (for `self` and `other`) and is used by the `<` operator. Read more

#### `
#[must_use]
fn le(&self, other: &Rhs) -> bool`[src]

This method tests less than or equal to (for `self` and `other`) and is used by the `<=` operator. Read more

#### `
#[must_use]
fn gt(&self, other: &Rhs) -> bool`[src]

This method tests greater than (for `self` and `other`) and is used by the `>` operator. Read more

#### `
#[must_use]
fn ge(&self, other: &Rhs) -> bool`[src]

This method tests greater than or equal to (for `self` and `other`) and is used by the `>=` operator. Read more

### `impl<'a, 'b> PartialOrd<OsString> for Cow<'a, OsStr>`1.8.0[src]

#### `fn partial_cmp(&self, other: &OsString) -> Option<Ordering>`[src]

This method returns an ordering between `self` and `other` values if one exists. Read more

#### `
#[must_use]
fn lt(&self, other: &Rhs) -> bool`[src]

This method tests less than (for `self` and `other`) and is used by the `<` operator. Read more

#### `
#[must_use]
fn le(&self, other: &Rhs) -> bool`[src]

This method tests less than or equal to (for `self` and `other`) and is used by the `<=` operator. Read more

#### `
#[must_use]
fn gt(&self, other: &Rhs) -> bool`[src]

This method tests greater than (for `self` and `other`) and is used by the `>` operator. Read more

#### `
#[must_use]
fn ge(&self, other: &Rhs) -> bool`[src]

This method tests greater than or equal to (for `self` and `other`) and is used by the `>=` operator. Read more

### `impl<'a, 'b> PartialOrd<Cow<'a, OsStr>> for OsString` 1.8.0[src]

#### `fn partial_cmp(&self, other: &Cow<'a, OsStr>) -> Option<Ordering>`[src]

This method returns an ordering between `self` and `other` values if one exists. Read more

#### `
#[must_use]
fn lt(&self, other: &Rhs) -> bool`[src]

This method tests less than (for `self` and `other`) and is used by the `<` operator. Read more

#### `
#[must_use]
fn le(&self, other: &Rhs) -> bool`[src]

This method tests less than or equal to (for `self` and `other`) and is used by the `<=` operator. Read more

#### `
#[must_use]
fn gt(&self, other: &Rhs) -> bool`[src]

This method tests greater than (for `self` and `other`) and is used by the `>` operator. Read more

#### `
#[must_use]
fn ge(&self, other: &Rhs) -> bool`[src]

This method tests greater than or equal to (for `self` and `other`) and is used by the `>=` operator. Read more

### `impl<'a, 'b> PartialOrd<OsString> for PathBuf` 1.8.0[src]

#### `fn partial_cmp(&self, other: &OsString) -> Option<Ordering>`[src]

This method returns an ordering between `self` and `other` values if one exists. Read more

#### `
#[must_use]
fn lt(&self, other: &Rhs) -> bool`[src]

This method tests less than (for `self` and `other`) and is used by the `<` operator. Read more

#### `
#[must_use]
fn le(&self, other: &Rhs) -> bool`[src]

This method tests less than or equal to (for `self` and `other`) and is used by the `<=` operator. Read more

#### `
#[must_use]
fn gt(&self, other: &Rhs) -> bool`[src]

This method tests greater than (for `self` and `other`) and is used by the `>` operator. Read more

#### `
#[must_use]
fn ge(&self, other: &Rhs) -> bool`[src]

This method tests greater than or equal to (for `self` and `other`) and is used by the `>=` operator. Read more

### `impl<'a, 'b> PartialOrd<PathBuf> for OsString` 1.8.0[src]

#### `fn partial_cmp(&self, other: &PathBuf) -> Option<Ordering>`[src]

This method returns an ordering between `self` and `other` values if one exists. Read more

#### `
#[must_use]
fn lt(&self, other: &Rhs) -> bool`[src]

This method tests less than (for `self` and `other`) and is used by the `<` operator. Read more

#### `
#[must_use]
fn le(&self, other: &Rhs) -> bool`[src]

This method tests less than or equal to (for `self` and `other`) and is used by the `<=` operator. Read more

#### `
#[must_use]
fn gt(&self, other: &Rhs) -> bool`[src]

This method tests greater than (for `self` and `other`) and is used by the `>` operator. Read more

#### `
#[must_use]
fn ge(&self, other: &Rhs) -> bool`[src]

This method tests greater than or equal to (for `self` and `other`) and is used by the `>=` operator. Read more

### `impl<'a, 'b> PartialOrd<OsString> for Path` 1.8.0[src]

#### `fn partial_cmp(&self, other: &OsString) -> Option<Ordering>`[src]

This method returns an ordering between `self` and `other` values if one exists. Read more

#### `
#[must_use]
fn lt(&self, other: &Rhs) -> bool`[src]

This method tests less than (for `self` and `other`) and is used by the `<` operator. Read more

#### `
#[must_use]
fn le(&self, other: &Rhs) -> bool`[src]

This method tests less than or equal to (for `self` and `other`) and is used by the `<=` operator. Read more

#### `
#[must_use]
fn gt(&self, other: &Rhs) -> bool`[src]

This method tests greater than (for `self` and `other`) and is used by the `>` operator. Read more

#### `
#[must_use]
fn ge(&self, other: &Rhs) -> bool`[src]

This method tests greater than or equal to (for `self` and `other`) and is used by the `>=` operator. Read more

### `impl<'a, 'b> PartialOrd<Path> for OsString` 1.8.0[src]

#### `fn partial_cmp(&self, other: &Path) -> Option<Ordering>`[src]

This method returns an ordering between `self` and `other` values if one exists. Read more

#### `
#[must_use]
fn lt(&self, other: &Rhs) -> bool`[src]

This method tests less than (for `self` and `other`) and is used by the `<` operator. Read more

#### `
#[must_use]
fn le(&self, other: &Rhs) -> bool`[src]

This method tests less than or equal to (for `self` and `other`) and is used by the `<=` operator. Read more

#### `
#[must_use]
fn gt(&self, other: &Rhs) -> bool`[src]

This method tests greater than (for `self` and `other`) and is used by the `>` operator. Read more

#### `
#[must_use]
fn ge(&self, other: &Rhs) -> bool`[src]

This method tests greater than or equal to (for `self` and `other`) and is used by the `>=` operator. Read more

### `impl<'a, 'b> PartialOrd<OsString> for &'a Path` 1.8.0[src]

#### `fn partial_cmp(&self, other: &OsString) -> Option<Ordering>`[src]

This method returns an ordering between `self` and `other` values if one exists. Read more

#### `
#[must_use]
fn lt(&self, other: &Rhs) -> bool`[src]

This method tests less than (for `self` and `other`) and is used by the `<` operator. Read more

#### `
#[must_use]
fn le(&self, other: &Rhs) -> bool`[src]

This method tests less than or equal to (for `self` and `other`) and is used by the `<=` operator. Read more

#### `
#[must_use]
fn gt(&self, other: &Rhs) -> bool`[src]

This method tests greater than (for `self` and `other`) and is used by the `>` operator. Read more

#### `
#[must_use]
fn ge(&self, other: &Rhs) -> bool`[src]

This method tests greater than or equal to (for `self` and `other`) and is used by the `>=` operator. Read more

### `impl<'a, 'b> PartialOrd<&'a Path> for OsString` 1.8.0[src]

#### `fn partial_cmp(&self, other: &&'a Path) -> Option<Ordering>`[src]

This method returns an ordering between `self` and `other` values if one exists. Read more

#### `
#[must_use]
fn lt(&self, other: &Rhs) -> bool`[src]

This method tests less than (for `self` and `other`) and is used by the `<` operator. Read more

#### `
#[must_use]
fn le(&self, other: &Rhs) -> bool`[src]

This method tests less than or equal to (for `self` and `other`) and is used by the `<=` operator. Read more

#### `
#[must_use]
fn gt(&self, other: &Rhs) -> bool`[src]

This method tests greater than (for `self` and `other`) and is used by the `>` operator. Read more

#### `
#[must_use]
fn ge(&self, other: &Rhs) -> bool`[src]

This method tests greater than or equal to (for `self` and `other`) and is used by the `>=` operator. Read more

### `impl<'a, 'b> PartialOrd<OsString> for Cow<'a, Path>`1.8.0[src]

#### `fn partial_cmp(&self, other: &OsString) -> Option<Ordering>`[src]

This method returns an ordering between `self` and `other` values if one exists. Read more

#### `
#[must_use]
fn lt(&self, other: &Rhs) -> bool`[src]

This method tests less than (for `self` and `other`) and is used by the `<` operator. Read more

#### `
#[must_use]
fn le(&self, other: &Rhs) -> bool`[src]

This method tests less than or equal to (for `self` and `other`) and is used by the `<=` operator. Read more

#### `
#[must_use]
fn gt(&self, other: &Rhs) -> bool`[src]

This method tests greater than (for `self` and `other`) and is used by the `>` operator. Read more

#### `
#[must_use]
fn ge(&self, other: &Rhs) -> bool`[src]

This method tests greater than or equal to (for `self` and `other`) and is used by the `>=` operator. Read more

### `impl<'a, 'b> PartialOrd<Cow<'a, Path>> for OsString` 1.8.0[src]

#### `fn partial_cmp(&self, other: &Cow<'a, Path>) -> Option<Ordering>`[src]

This method returns an ordering between `self` and `other` values if one exists. Read more

#### `
#[must_use]
fn lt(&self, other: &Rhs) -> bool`[src]

This method tests less than (for `self` and `other`) and is used by the `<` operator. Read more

#### `
#[must_use]
fn le(&self, other: &Rhs) -> bool`[src]

This method tests less than or equal to (for `self` and `other`) and is used by the `<=` operator. Read more

#### `
#[must_use]
fn gt(&self, other: &Rhs) -> bool`[src]

This method tests greater than (for `self` and `other`) and is used by the `>` operator. Read more

#### `
#[must_use]
fn ge(&self, other: &Rhs) -> bool`[src]

This method tests greater than or equal to (for `self` and `other`) and is used by the `>=` operator. Read more

### `impl Deref for OsString`[src]

#### `type Target = OsStr`

The resulting type after dereferencing.

#### `fn deref(&self) -> &OsStr`[src]

Dereferences the value.

### `impl Index<RangeFull> for OsString`[src]

#### `type Output = OsStr`

The returned type after indexing.

#### `fn index(&self, _index: RangeFull) -> &OsStr`[src]

Performs the indexing (`container[index]`) operation.

### `impl Hash for OsString`[src]

#### `fn hash<H: Hasher>(&self, state: &mut H)`[src]

Feeds this value into the given [`Hasher`]. Read more

#### `fn hash_slice<H>(data: &[Self], state: &mut H) where
H: Hasher,` 1.3.0[src]

Feeds a slice of this type into the given [`Hasher`]. Read more

### `impl AsRef<OsStr> for OsString`[src]

#### `fn as_ref(&self) -> &OsStr`[src]

Performs the conversion.

### `impl AsRef<Path> for OsString`[src]

#### `fn as_ref(&self) -> &Path`[src]

Performs the conversion.

### `impl From<String> for OsString`[src]

#### `fn from(s: String) -> OsString`[src]

Converts a `String` into a `OsString`.

The conversion copies the data, and includes an allocation on the heap.

### `impl<T: ?Sized + AsRef<OsStr>, '_> From<&'_ T> for OsString`[src]

#### `fn from(s: &T) -> OsString`[src]

Performs the conversion.

### `impl From<Box<OsStr>> for OsString` 1.18.0[src]

#### `fn from(boxed: Box<OsStr>) -> OsString`[src]

Converts a `Box<OsStr>` into a `OsString` without copying or allocating.

### `impl From<OsString> for Box<OsStr>`1.20.0[src]

####
ⓘImportant traits for Box<F>

### Important traits for Box<F>

`impl<F> Future for Box<F> where
F: Unpin + Future + ?Sized, type Output = <F as Future>::Output;impl<I> Iterator for Box<I> where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<R: Read + ?Sized> Read for Box<R>impl<W: Write + ?Sized> Write for Box<W>`
`fn from(s: OsString) -> Box<OsStr>`[src]

Converts a `OsString` into a `Box``<OsStr>` without copying or allocating.

### `impl From<OsString> for Arc<OsStr>`1.24.0[src]

#### `fn from(s: OsString) -> Arc<OsStr>`[src]

Converts a `OsString` into a `Arc``<OsStr>` without copying or allocating.

### `impl From<OsString> for Rc<OsStr>`1.24.0[src]

#### `fn from(s: OsString) -> Rc<OsStr>`[src]

Converts a `OsString` into a `Rc``<OsStr>` without copying or allocating.

### `impl<'a> From<OsString> for Cow<'a, OsStr>`1.28.0[src]

#### `fn from(s: OsString) -> Cow<'a, OsStr>`[src]

Performs the conversion.

### `impl<'a> From<&'a OsString> for Cow<'a, OsStr>`1.28.0[src]

#### `fn from(s: &'a OsString) -> Cow<'a, OsStr>`[src]

Performs the conversion.

### `impl<'a> From<Cow<'a, OsStr>> for OsString` 1.28.0[src]

#### `fn from(s: Cow<'a, OsStr>) -> Self`[src]

Performs the conversion.

### `impl From<OsString> for PathBuf`[src]

#### `fn from(s: OsString) -> PathBuf`[src]

Converts a `OsString` into a `PathBuf`

This conversion does not allocate or copy memory.

### `impl From<PathBuf> for OsString` 1.14.0[src]

#### `fn from(path_buf: PathBuf) -> OsString`[src]

Converts a `PathBuf` into a `OsString`

This conversion does not allocate or copy memory.

### `impl Default for OsString` 1.9.0[src]

#### `fn default() -> OsString`[src]

Constructs an empty `OsString`.

### `impl Borrow<OsStr> for OsString`[src]

#### `fn borrow(&self) -> &OsStr`[src]

Immutably borrows from an owned value. Read more

## Auto Trait Implementations

### `impl Send for OsString`

### `impl Sync for OsString`

## Blanket Implementations

### `impl<T, U> TryFrom<U> for T where
U: Into<T>,` [src]

#### `type Error = Infallible`

The type returned in the event of a conversion error.

#### `fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>`[src]

Performs the conversion.

### `impl<T, U> Into<U> for T where
U: From<T>,` [src]

#### `fn into(self) -> U`[src]

Performs the conversion.

### `impl<T> From<T> for T`[src]

#### `fn from(t: T) -> T`[src]

Performs the conversion.

### `impl<T, U> TryInto<U> for T where
U: TryFrom<T>,` [src]

#### `type Error = <U as TryFrom<T>>::Error`

The type returned in the event of a conversion error.

#### `fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>`[src]

Performs the conversion.

### `impl<T> Borrow<T> for T where
T: ?Sized,` [src]

####
ⓘImportant traits for &'_ mut I

### Important traits for &'_ mut I

`impl<'_, I> Iterator for &'_ mut I where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<'_, F> Future for &'_ mut F where
F: Unpin + Future + ?Sized, type Output = <F as Future>::Output;impl<R: Read + ?Sized, '_> Read for &'_ mut Rimpl<W: Write + ?Sized, '_> Write for &'_ mut W`
`fn borrow(&self) -> &T`[src]

Immutably borrows from an owned value. Read more

### `impl<T> BorrowMut<T> for T where
T: ?Sized,` [src]

####
ⓘImportant traits for &'_ mut I

### Important traits for &'_ mut I

`impl<'_, I> Iterator for &'_ mut I where
I: Iterator + ?Sized, type Item = <I as Iterator>::Item;impl<'_, F> Future for &'_ mut F where
F: Unpin + Future + ?Sized, type Output = <F as Future>::Output;impl<R: Read + ?Sized, '_> Read for &'_ mut Rimpl<W: Write + ?Sized, '_> Write for &'_ mut W`
`fn borrow_mut(&mut self) -> &mut T`[src]

Mutably borrows from an owned value. Read more

### `impl<T> Any for T where
T: 'static + ?Sized,` [src]

#### `fn type_id(&self) -> TypeId`[src]

Gets the `TypeId` of `self`. Read more

### `impl<T> ToOwned for T where
T: Clone,` [src]

#### `type Owned = T`

The resulting type after obtaining ownership.

#### `fn to_owned(&self) -> T`[src]

Creates owned data from borrowed data, usually by cloning. Read more

#### `fn clone_into(&self, target: &mut T)`[src]

🔬 This is a nightly-only experimental API. (`toowned_clone_into` #41263)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

# Help

## Keyboard Shortcuts

`?`
  Show this help dialog
`S`
  Focus the search field
`↑`
  Move up in search results
`↓`
  Move down in search results
`↹`
  Switch tab
`⏎`
  Go to active search result
`+`
  Expand all sections
`-`
  Collapse all sections

## Search Tricks

Prefix searches with a type followed by a colon (e.g., `fn:`) to restrict the search to a given type.

Accepted types are: `fn`, `mod`, `struct`, `enum`, `trait`, `type`, `macro`, and `const`.

Search functions by type signature (e.g., `vec -> usize` or `* -> vec`)

Search multiple things at once by splitting your query with comma (e.g., `str,u8` or `String,struct:Vec,test`)