1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
pub mod adapter; mod ser; mod de; #[cfg(test)] mod tests; pub use ser::{ Serializer, SerializerContext }; pub use de::{ Deserializer, DeserializerContext, DeserializeSeed }; use std::fmt::Display; use std::io::{ Read, Write, Cursor }; use serde::de::{ Expected, Unexpected }; use serde::{ Serialize, Deserialize }; use crate::{ HaxeError, Result, StreamDeserializer, StreamSerializer }; impl serde::de::Error for HaxeError { fn custom<T: Display>(msg: T) -> Self { HaxeError::custom(msg) } fn invalid_type(unexp: Unexpected, exp: &dyn Expected) -> Self { HaxeError::unexpected_input(exp, unexp) } fn invalid_value(unexp: Unexpected, exp: &dyn Expected) -> Self { HaxeError::unexpected_input(exp, unexp) } } impl serde::ser::Error for HaxeError { fn custom<T: Display>(msg: T) -> Self { HaxeError::custom(msg) } } pub fn from_reader_with<'de, R: Read, T: Deserialize<'de>>(reader: R, ctx: DeserializerContext) -> Result<T> { let mut de = StreamDeserializer::new(reader, ctx); let value = de.deserialize()?; de.end()?; Ok(value) } pub fn from_reader<'de, R: Read, T: Deserialize<'de>>(reader: R) -> Result<T> { from_reader_with(reader, DeserializerContext::new()) } pub fn from_slice_with<'de, T: Deserialize<'de>>(bytes: &[u8], ctx: DeserializerContext) -> Result<T> { from_reader_with(Cursor::new(&bytes), ctx) } pub fn from_slice<'de, T: Deserialize<'de>>(bytes: &[u8]) -> Result<T> { from_reader(Cursor::new(&bytes)) } pub fn from_str_with<'de, T: Deserialize<'de>>(string: &str, ctx: DeserializerContext) -> Result<T> { from_reader_with(Cursor::new(&string), ctx) } pub fn from_str<'de, T: Deserialize<'de>>(string: &str) -> Result<T> { from_reader(Cursor::new(&string)) } pub fn to_writer_with<W: Write, T: Serialize>(value: &T, writer: W, ctx: SerializerContext) -> Result<()> { StreamSerializer::new(writer, ctx).serialize(value) } pub fn to_writer<W: Write, T: Serialize>(value: &T, writer: W) -> Result<()> { to_writer_with(value, writer, SerializerContext::new()) } pub fn to_vec_with<T: Serialize>(value: &T, ctx: SerializerContext) -> Result<Vec<u8>> { let mut ser = StreamSerializer::new(Cursor::new(Vec::new()), ctx); ser.serialize(value)?; Ok(ser.into_inner().into_inner()) } pub fn to_vec<T: Serialize>(value: &T) -> Result<Vec<u8>> { to_vec_with(value, SerializerContext::new()) } pub fn to_string_with<T: Serialize>(value: &T, ctx: SerializerContext) -> Result<String> { let vec = to_vec_with(value, ctx)?; Ok(String::from_utf8(vec).expect("invalid utf8 data")) } pub fn to_string<T: Serialize>(value: &T) -> Result<String> { to_string_with(value, SerializerContext::new()) }