mod base; mod impls; pub use self::base::*; pub trait Serialize { fn serialize(&self, s: S) -> Result<(), S::Error> where S: Serializer; } pub trait SerializeRealPrimitive { type Error; fn serialize_real_primitive(self, real: R) -> Result<(), Self::Error>; } pub trait SerializeReal: SerializeRealPrimitive { } pub trait SerializeDict { type Error; fn serialize_kv(&mut self, key: K, value: V) -> Result<(), Self::Error> where K: Serialize, V: Serialize; fn end(self) -> Result<(), Self::Error>; } pub trait SerializeList { type Error; fn serialize_item(&mut self, item: I) -> Result<(), Self::Error> where I: Serialize; fn end(self) -> Result<(), Self::Error>; } pub trait SerializeMultilineText { type Error; fn serialize_line(&mut self, line: &str) -> Result<(), Self::Error>; fn end(self) -> Result<(), Self::Error>; } pub trait Serializer: Sized { type Error; type SerializeReal: SerializeReal; type SerializeDict: SerializeDict; type SerializeList: SerializeList; type SerializeMultilineText: SerializeMultilineText; fn serialize_any(self, any: T) -> Result<(), Self::Error> where T: Serialize { any.serialize(self) } fn serialize_real(self, r: R) -> Result<(), Self::Error> where Self::SerializeReal: SerializeRealPrimitive { Self::SerializeReal::serialize_real_primitive(r) //Ok(C::RealSerializer::serialize_real::(&mut self.out, r)?) //Ok(()) } fn serialize_real_u8(self, real: u8) -> Result<(), Self::Error>; fn serialize_real_u16(self, real: u16) -> Result<(), Self::Error>; fn serialize_real_u32(self, real: u32) -> Result<(), Self::Error>; fn serialize_real_u64(self, real: u64) -> Result<(), Self::Error>; fn serialize_real_i8(self, real: i8) -> Result<(), Self::Error>; fn serialize_real_i16(self, real: i16) -> Result<(), Self::Error>; fn serialize_real_i32(self, real: i32) -> Result<(), Self::Error>; fn serialize_real_i64(self, real: i64) -> Result<(), Self::Error>; fn serialize_real_f32(self, real: f32) -> Result<(), Self::Error>; fn serialize_real_f64(self, real: f64) -> Result<(), Self::Error>; fn serialize_atom<'a>(self, atom: &'a str) -> Result<(), Self::Error>; fn serialize_text<'a>(self, text: &'a str) -> Result<(), Self::Error>; fn serialize_multiline_text<'a, M>(self, lines: M) -> Result<(), Self::Error> where M: IntoIterator; fn serialize_unit<'a, V>(self, name: &'a str, value: V) -> Result<(), Self::Error> where V: Serialize; fn serialize_list_parts(self) -> Result; fn serialize_dict_parts(self) -> Result; fn serialize_multiline_text_parts(self) -> Result; fn serialize_list(self, list: L) -> Result<(), Self::Error> where V: Serialize, L: IntoIterator; fn serialize_dict(self, dict: D) -> Result<(), Self::Error> where K: Serialize, V: Serialize, D: IntoIterator; }