diff --git a/serde/src/de/mod.rs b/serde/src/de/mod.rs index 0def4a6c..9a6130ab 100644 --- a/serde/src/de/mod.rs +++ b/serde/src/de/mod.rs @@ -112,6 +112,7 @@ pub mod value; mod from_primitive; mod ignored_any; mod impls; +mod utf8; pub use self::ignored_any::IgnoredAny; @@ -1049,7 +1050,7 @@ pub trait Visitor<'de>: Sized { fn visit_char(self, v: char) -> Result where E: Error { - self.visit_str(::utils::encode_utf8(v).as_str()) + self.visit_str(utf8::encode(v).as_str()) } /// Deserialize a `&str` into a `Value`. diff --git a/serde/src/utils.rs b/serde/src/de/utf8.rs similarity index 90% rename from serde/src/utils.rs rename to serde/src/de/utf8.rs index 4e81616a..8e02e253 100644 --- a/serde/src/utils.rs +++ b/serde/src/de/utf8.rs @@ -1,5 +1,3 @@ -//! Private utility functions - const TAG_CONT: u8 = 0b1000_0000; const TAG_TWO_B: u8 = 0b1100_0000; const TAG_THREE_B: u8 = 0b1110_0000; @@ -9,7 +7,7 @@ const MAX_TWO_B: u32 = 0x800; const MAX_THREE_B: u32 = 0x10000; #[inline] -pub fn encode_utf8(c: char) -> EncodeUtf8 { +pub fn encode(c: char) -> Encode { let code = c as u32; let mut buf = [0; 4]; let pos = if code < MAX_ONE_B { @@ -31,18 +29,18 @@ pub fn encode_utf8(c: char) -> EncodeUtf8 { buf[3] = (code & 0x3F) as u8 | TAG_CONT; 0 }; - EncodeUtf8 { + Encode { buf: buf, pos: pos, } } -pub struct EncodeUtf8 { +pub struct Encode { buf: [u8; 4], pos: usize, } -impl EncodeUtf8 { +impl Encode { // FIXME: use this from_utf8_unchecked, since we know it can never fail pub fn as_str(&self) -> &str { ::core::str::from_utf8(&self.buf[self.pos..]).unwrap() diff --git a/serde/src/lib.rs b/serde/src/lib.rs index ada910ca..fe9cfac4 100644 --- a/serde/src/lib.rs +++ b/serde/src/lib.rs @@ -93,7 +93,6 @@ pub use de::{Deserialize, Deserializer}; #[macro_use] mod macros; -mod utils; pub mod de; pub mod ser;