Rollup merge of #52340 - cypher:document-from-trait-in-ffi, r=steveklabnik
Document From trait implementations for OsStr, OsString, CString, and CStr As part of issue #51430 (cc @skade). The allocation and copy claims should be double-checked. r? @steveklabnik
This commit is contained in:
commit
b7ee110ea2
@ -642,6 +642,12 @@ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
|
||||
#[stable(feature = "cstring_into", since = "1.7.0")]
|
||||
impl From<CString> for Vec<u8> {
|
||||
/// Converts a [`CString`] into a [`Vec`]`<u8>`.
|
||||
///
|
||||
/// The conversion consumes the [`CString`], and removes the terminating NUL byte.
|
||||
///
|
||||
/// [`Vec`]: ../vec/struct.Vec.html
|
||||
/// [`CString`]: ../ffi/struct.CString.html
|
||||
#[inline]
|
||||
fn from(s: CString) -> Vec<u8> {
|
||||
s.into_bytes()
|
||||
@ -700,6 +706,10 @@ fn from(s: &'a CStr) -> Box<CStr> {
|
||||
|
||||
#[stable(feature = "c_string_from_box", since = "1.18.0")]
|
||||
impl From<Box<CStr>> for CString {
|
||||
/// Converts a [`Box`]`<CStr>` into a [`CString`] without copying or allocating.
|
||||
///
|
||||
/// [`Box`]: ../boxed/struct.Box.html
|
||||
/// [`CString`]: ../ffi/struct.CString.html
|
||||
#[inline]
|
||||
fn from(s: Box<CStr>) -> CString {
|
||||
s.into_c_string()
|
||||
@ -716,6 +726,10 @@ fn clone(&self) -> Self {
|
||||
|
||||
#[stable(feature = "box_from_c_string", since = "1.20.0")]
|
||||
impl From<CString> for Box<CStr> {
|
||||
/// Converts a [`CString`] into a [`Box`]`<CStr>` without copying or allocating.
|
||||
///
|
||||
/// [`CString`]: ../ffi/struct.CString.html
|
||||
/// [`Box`]: ../boxed/struct.Box.html
|
||||
#[inline]
|
||||
fn from(s: CString) -> Box<CStr> {
|
||||
s.into_boxed_c_str()
|
||||
@ -748,6 +762,10 @@ fn from(s: &'a CString) -> Cow<'a, CStr> {
|
||||
|
||||
#[stable(feature = "shared_from_slice2", since = "1.24.0")]
|
||||
impl From<CString> for Arc<CStr> {
|
||||
/// Converts a [`CString`] into a [`Arc`]`<CStr>` without copying or allocating.
|
||||
///
|
||||
/// [`CString`]: ../ffi/struct.CString.html
|
||||
/// [`Arc`]: ../sync/struct.Arc.html
|
||||
#[inline]
|
||||
fn from(s: CString) -> Arc<CStr> {
|
||||
let arc: Arc<[u8]> = Arc::from(s.into_inner());
|
||||
@ -766,6 +784,10 @@ fn from(s: &CStr) -> Arc<CStr> {
|
||||
|
||||
#[stable(feature = "shared_from_slice2", since = "1.24.0")]
|
||||
impl From<CString> for Rc<CStr> {
|
||||
/// Converts a [`CString`] into a [`Rc`]`<CStr>` without copying or allocating.
|
||||
///
|
||||
/// [`CString`]: ../ffi/struct.CString.html
|
||||
/// [`Rc`]: ../rc/struct.Rc.html
|
||||
#[inline]
|
||||
fn from(s: CString) -> Rc<CStr> {
|
||||
let rc: Rc<[u8]> = Rc::from(s.into_inner());
|
||||
@ -839,6 +861,10 @@ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl From<NulError> for io::Error {
|
||||
/// Converts a [`NulError`] into a [`io::Error`].
|
||||
///
|
||||
/// [`NulError`]: ../ffi/struct.NulError.html
|
||||
/// [`io::Error`]: ../io/struct.Error.html
|
||||
fn from(_: NulError) -> io::Error {
|
||||
io::Error::new(io::ErrorKind::InvalidInput,
|
||||
"data provided contains a nul byte")
|
||||
|
@ -348,6 +348,12 @@ pub fn into_boxed_os_str(self) -> Box<OsStr> {
|
||||
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
impl From<String> for OsString {
|
||||
/// Converts a [`String`] into a [`OsString`].
|
||||
///
|
||||
/// The conversion copies the data, and includes an allocation on the heap.
|
||||
///
|
||||
/// [`String`]: ../string/struct.String.html
|
||||
/// [`OsString`]: struct.OsString.html
|
||||
fn from(s: String) -> OsString {
|
||||
OsString { inner: Buf::from_string(s) }
|
||||
}
|
||||
@ -630,6 +636,10 @@ fn from(s: &'a OsStr) -> Box<OsStr> {
|
||||
|
||||
#[stable(feature = "os_string_from_box", since = "1.18.0")]
|
||||
impl From<Box<OsStr>> for OsString {
|
||||
/// Converts a `Box<OsStr>` into a `OsString` without copying or allocating.
|
||||
///
|
||||
/// [`Box`]: ../boxed/struct.Box.html
|
||||
/// [`OsString`]: ../ffi/struct.OsString.html
|
||||
fn from(boxed: Box<OsStr>) -> OsString {
|
||||
boxed.into_os_string()
|
||||
}
|
||||
@ -637,6 +647,10 @@ fn from(boxed: Box<OsStr>) -> OsString {
|
||||
|
||||
#[stable(feature = "box_from_os_string", since = "1.20.0")]
|
||||
impl From<OsString> for Box<OsStr> {
|
||||
/// Converts a [`OsString`] into a [`Box`]`<OsStr>` without copying or allocating.
|
||||
///
|
||||
/// [`Box`]: ../boxed/struct.Box.html
|
||||
/// [`OsString`]: ../ffi/struct.OsString.html
|
||||
fn from(s: OsString) -> Box<OsStr> {
|
||||
s.into_boxed_os_str()
|
||||
}
|
||||
@ -652,6 +666,10 @@ fn clone(&self) -> Self {
|
||||
|
||||
#[stable(feature = "shared_from_slice2", since = "1.24.0")]
|
||||
impl From<OsString> for Arc<OsStr> {
|
||||
/// Converts a [`OsString`] into a [`Arc`]`<OsStr>` without copying or allocating.
|
||||
///
|
||||
/// [`Arc`]: ../sync/struct.Arc.html
|
||||
/// [`OsString`]: ../ffi/struct.OsString.html
|
||||
#[inline]
|
||||
fn from(s: OsString) -> Arc<OsStr> {
|
||||
let arc = s.inner.into_arc();
|
||||
@ -670,6 +688,10 @@ fn from(s: &OsStr) -> Arc<OsStr> {
|
||||
|
||||
#[stable(feature = "shared_from_slice2", since = "1.24.0")]
|
||||
impl From<OsString> for Rc<OsStr> {
|
||||
/// Converts a [`OsString`] into a [`Rc`]`<OsStr>` without copying or allocating.
|
||||
///
|
||||
/// [`Rc`]: ../rc/struct.Rc.html
|
||||
/// [`OsString`]: ../ffi/struct.OsString.html
|
||||
#[inline]
|
||||
fn from(s: OsString) -> Rc<OsStr> {
|
||||
let rc = s.inner.into_rc();
|
||||
|
Loading…
Reference in New Issue
Block a user