diff options
| author | Yoh Deadfall <yoh.deadfall@hotmail.com> | 2024-09-20 12:27:51 +0300 |
|---|---|---|
| committer | Yoh Deadfall <yoh.deadfall@hotmail.com> | 2024-10-01 21:59:18 +0300 |
| commit | 302551388b1942bb4216bb5a15d9d55cee3643a8 (patch) | |
| tree | d34b5918b496048b692c614546e157b68bee5c3e /library/alloc/src | |
| parent | b0af276da341bcd3fbfe71871aeacc8650f344ed (diff) | |
| download | rust-302551388b1942bb4216bb5a15d9d55cee3643a8.tar.gz rust-302551388b1942bb4216bb5a15d9d55cee3643a8.zip | |
Implemented FromStr for CString and TryFrom<CString> for String
Diffstat (limited to 'library/alloc/src')
| -rw-r--r-- | library/alloc/src/ffi/c_str.rs | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/library/alloc/src/ffi/c_str.rs b/library/alloc/src/ffi/c_str.rs index e32676a6543..15b0506023d 100644 --- a/library/alloc/src/ffi/c_str.rs +++ b/library/alloc/src/ffi/c_str.rs @@ -7,7 +7,7 @@ use core::borrow::Borrow; use core::ffi::{c_char, CStr}; use core::num::NonZero; use core::slice::memchr; -use core::str::{self, Utf8Error}; +use core::str::{self, FromStr, Utf8Error}; use core::{fmt, mem, ops, ptr, slice}; use crate::borrow::{Cow, ToOwned}; @@ -815,6 +815,30 @@ impl From<Vec<NonZero<u8>>> for CString { } } +impl FromStr for CString { + type Err = NulError; + + /// Converts a string `s` into a [`CString`]. + /// + /// This method is equivalent to [`CString::new`]. + #[inline] + fn from_str(s: &str) -> Result<Self, Self::Err> { + Self::new(s) + } +} + +impl TryFrom<CString> for String { + type Error = IntoStringError; + + /// Converts a [`CString`] into a [`String`] if it contains valid UTF-8 data. + /// + /// This method is equivalent to [`CString::into_string`]. + #[inline] + fn try_from(value: CString) -> Result<Self, Self::Error> { + value.into_string() + } +} + #[cfg(not(test))] #[stable(feature = "more_box_slice_clone", since = "1.29.0")] impl Clone for Box<CStr> { |
