Serialize and deserialize CString through [u8]

This commit is contained in:
Jon Gjengset
2017-03-03 18:05:08 -05:00
parent be09fc9bbb
commit 0d6d077e6a
+4 -2
View File
@@ -26,7 +26,7 @@ use std::net;
use std::path;
use core::str;
#[cfg(feature = "std")]
use std::ffi::{CStr, CString};
use std::ffi::CString;
#[cfg(feature = "std")]
use std::rc::Rc;
@@ -55,6 +55,8 @@ use de::{Deserialize, Deserializer, EnumVisitor, Error, MapVisitor, SeqVisitor,
VariantVisitor, Visitor};
use de::from_primitive::FromPrimitive;
use super::super::bytes::ByteBuf;
///////////////////////////////////////////////////////////////////////////////
/// A visitor that produces a `()`.
@@ -302,7 +304,7 @@ impl Deserialize for CString {
fn deserialize<D>(deserializer: D) -> Result<CString, D::Error>
where D: Deserializer
{
let v: Vec<u8> = try!(Deserialize::deserialize(deserializer));
let v: Vec<u8> = try!(ByteBuf::deserialize(deserializer)).into();
CString::new(v)
.map_err(|e| Error::custom(format!("unexpected NULL at byte {}", e.nul_position())))
}