Overhaul the documentation for OsString / OsStr
This commit is contained in:
@@ -92,13 +92,40 @@
|
||||
//! your code can detect errors in case the environment variable did
|
||||
//! not in fact contain valid Unicode data.
|
||||
//!
|
||||
//! * [`OsStr`] represents a borrowed string slice in a format that
|
||||
//! can be passed to the operating system. It can be converted into
|
||||
//! an UTF-8 Rust string slice in a similar way to `OsString`.
|
||||
//! * [`OsStr`] represents a borrowed reference to a string in a
|
||||
//! format that can be passed to the operating system. It can be
|
||||
//! converted into an UTF-8 Rust string slice in a similar way to
|
||||
//! `OsString`.
|
||||
//!
|
||||
//! # Conversions
|
||||
//!
|
||||
//! ## On Unix
|
||||
//!
|
||||
//! On Unix, [`OsStr`] implements the `std::os::unix:ffi::`[`OsStrExt`][unix.OsStrExt] trait, which
|
||||
//! augments it with two methods, [`from_bytes`] and [`as_bytes`]. These do inexpensive conversions
|
||||
//! from and to UTF-8 byte slices.
|
||||
//!
|
||||
//! Additionally, on Unix [`OsString`] implements the
|
||||
//! `std::os::unix:ffi::`[`OsStringExt`][unix.OsStringExt] trait,
|
||||
//! which provides [`from_vec`] and [`into_vec`] methods that consume
|
||||
//! their arguments, and take or produce vectors of [`u8`].
|
||||
//!
|
||||
//! ## On Windows
|
||||
//!
|
||||
//! On Windows, [`OsStr`] implements the `std::os::windows::ffi::`[`OsStrExt`][windows.OsStrExt]
|
||||
//! trait, which provides an [`encode_wide`] method. This provides an iterator that can be
|
||||
//! [`collect`]ed into a vector of [`u16`].
|
||||
//!
|
||||
//! Additionally, on Windows [`OsString`] implements the
|
||||
//! `std::os::windows:ffi::`[`OsStringExt`][windows.OsStringExt] trait, which provides a
|
||||
//! [`from_wide`] method. The result of this method is an `OsString` which can be round-tripped to
|
||||
//! a Windows string losslessly.
|
||||
//!
|
||||
//! [`String`]: ../string/struct.String.html
|
||||
//! [`str`]: ../primitive.str.html
|
||||
//! [`char`]: ../primitive.char.html
|
||||
//! [`u8`]: ../primitive.u8.html
|
||||
//! [`u16`]: ../primitive.u16.html
|
||||
//! [Unicode scalar value]: http://www.unicode.org/glossary/#unicode_scalar_value
|
||||
//! [Unicode code point]: http://www.unicode.org/glossary/#code_point
|
||||
//! [`CString`]: struct.CString.html
|
||||
@@ -108,6 +135,18 @@
|
||||
//! [`env::set_var()`]: ../env/fn.set_var.html
|
||||
//! [`env::var_os()`]: ../env/fn.var_os.html
|
||||
//! [`Result<>`]: ../result/enum.Result.html
|
||||
//! [unix.OsStringExt]: ../os/unix/ffi/trait.OsStringExt.html
|
||||
//! [`from_vec`]: ../os/unix/ffi/trait.OsStringExt.html#tymethod.from_vec
|
||||
//! [`into_vec`]: ../os/unix/ffi/trait.OsStringExt.html#tymethod.into_vec
|
||||
//! [unix.OsStrExt]: ../os/unix/ffi/trait.OsStrExt.html
|
||||
//! [`from_bytes`]: ../os/unix/ffi/trait.OsStrExt.html#tymethod.from_bytes
|
||||
//! [`as_bytes`]: ../os/unix/ffi/trait.OsStrExt.html#tymethod.as_bytes
|
||||
//! [`OsStrExt`]: ../os/unix/ffi/trait.OsStrExt.html
|
||||
//! [windows.OsStrExt]: ../os/windows/ffi/trait.OsStrExt.html
|
||||
//! [`encode_wide`]: ../os/windows/ffi/trait.OsStrExt.html#tymethod.encode_wide
|
||||
//! [`collect`]: ../iter/trait.Iterator.html#method.collect
|
||||
//! [windows.OsStringExt]: ../os/windows/ffi/trait.OsStringExt.html
|
||||
//! [`from_wide`]: ../os/windows/ffi/trait.OsStringExt.html#tymethod.from_wide
|
||||
|
||||
#![stable(feature = "rust1", since = "1.0.0")]
|
||||
|
||||
|
||||
@@ -33,18 +33,65 @@ use sys_common::{AsInner, IntoInner, FromInner};
|
||||
///
|
||||
/// `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.
|
||||
/// to be converted into an "OS" string with no cost if possible.
|
||||
///
|
||||
/// `OsString` is to [`OsStr`] as [`String`] is to [`&str`]: the former
|
||||
/// in each pair are owned strings; the latter are borrowed
|
||||
/// references.
|
||||
///
|
||||
/// # 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`][String.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][conversions] for a discussion on the traits which
|
||||
/// `OsString` implements for conversions from/to native representations.
|
||||
///
|
||||
/// [`OsStr`]: struct.OsStr.html
|
||||
/// [`From`]: ../convert/trait.From.html
|
||||
/// [`from`]: ../convert/trait.From.html#tymethod.from
|
||||
/// [`String`]: ../string/struct.String.html
|
||||
/// [`&str`]: ../primitive.str.html
|
||||
/// [`u8`]: ../primitive.u8.html
|
||||
/// [`u16`]: ../primitive.u16.html
|
||||
/// [String.push_str]: ../string/struct.String.html#method.push_str
|
||||
/// [`new`]: #struct.OsString.html#method.new
|
||||
/// [`push`]: #struct.OsString.html#method.push
|
||||
/// [`as_os_str`]: #struct.OsString.html#method.as_os_str
|
||||
#[derive(Clone)]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub struct OsString {
|
||||
inner: Buf
|
||||
}
|
||||
|
||||
/// Slices into OS strings (see [`OsString`]).
|
||||
/// Borrowed reference to an OS string (see [`OsString`]).
|
||||
///
|
||||
/// This type represents a borrowed reference to a string in the operating system's preferred
|
||||
/// representation.
|
||||
///
|
||||
/// `OsStr` is to [`OsString`] as [`String`] is to [`&str`]: the former in each pair are borrowed
|
||||
/// references; the latter are owned strings.
|
||||
///
|
||||
/// See the [module's toplevel documentation about conversions][conversions] for a discussion on the traits which
|
||||
/// `OsStr` implements for conversions from/to native representations.
|
||||
///
|
||||
/// [`OsString`]: struct.OsString.html
|
||||
/// [conversions]: index.html#conversions
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub struct OsStr {
|
||||
inner: Slice
|
||||
|
||||
Reference in New Issue
Block a user