mirror of https://git.sr.ht/~stygianentity/bincode
Implemented the newly stabilized CString::from_vec_with_nul method (#473)
This commit is contained in:
parent
8106eadf66
commit
c1e9828e7d
|
|
@ -139,13 +139,20 @@ pub enum DecodeError {
|
||||||
duration: core::time::Duration,
|
duration: core::time::Duration,
|
||||||
},
|
},
|
||||||
|
|
||||||
/// The decoder tried to decode a `CStr` or `CString`, but the incoming data contained a 0 byte
|
/// The decoder tried to decode a `CStr`, but the incoming data contained a 0 byte
|
||||||
#[cfg(feature = "std")]
|
#[cfg(feature = "std")]
|
||||||
CStrNulError {
|
CStrNulError {
|
||||||
/// The inner exception
|
/// The inner exception
|
||||||
inner: std::ffi::FromBytesWithNulError,
|
inner: std::ffi::FromBytesWithNulError,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/// The decoder tried to decode a `CString`, but the incoming data contained a 0 byte
|
||||||
|
#[cfg(feature = "std")]
|
||||||
|
CStringNulError {
|
||||||
|
/// The inner exception
|
||||||
|
inner: std::ffi::FromVecWithNulError,
|
||||||
|
},
|
||||||
|
|
||||||
/// An uncommon error occured, see the inner text for more information
|
/// An uncommon error occured, see the inner text for more information
|
||||||
#[cfg(feature = "alloc")]
|
#[cfg(feature = "alloc")]
|
||||||
OtherString(alloc::string::String),
|
OtherString(alloc::string::String),
|
||||||
|
|
|
||||||
|
|
@ -128,15 +128,8 @@ impl Encode for CString {
|
||||||
|
|
||||||
impl Decode for CString {
|
impl Decode for CString {
|
||||||
fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> {
|
fn decode<D: Decoder>(decoder: &mut D) -> Result<Self, DecodeError> {
|
||||||
// BlockedTODO: https://github.com/rust-lang/rust/issues/73179
|
let vec = std::vec::Vec::decode(decoder)?;
|
||||||
// use `from_vec_with_nul` instead, combined with:
|
CString::from_vec_with_nul(vec).map_err(|inner| DecodeError::CStringNulError { inner })
|
||||||
// let bytes = std::vec::Vec::<u8>::decode(decoder)?;
|
|
||||||
|
|
||||||
// now we have to allocate twice unfortunately
|
|
||||||
let vec: std::vec::Vec<u8> = std::vec::Vec::decode(decoder)?;
|
|
||||||
let cstr =
|
|
||||||
CStr::from_bytes_with_nul(&vec).map_err(|e| DecodeError::CStrNulError { inner: e })?;
|
|
||||||
Ok(cstr.into())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue