2019-01-20 14:26:37 +00:00
|
|
|
mod base;
|
|
|
|
mod impls;
|
|
|
|
|
|
|
|
pub use self::base::*;
|
|
|
|
|
|
|
|
pub trait Serialize {
|
|
|
|
fn serialize<S>(&self, s: S) -> Result<(), S::Error>
|
2019-01-21 13:25:44 +00:00
|
|
|
where S: Serializer;
|
2019-01-20 14:26:37 +00:00
|
|
|
}
|
|
|
|
|
2019-01-22 06:04:44 +00:00
|
|
|
pub trait SerializeRealPrimitive<R> {
|
|
|
|
type Error;
|
|
|
|
|
|
|
|
fn serialize_real_primitive(self, real: R) -> Result<(), Self::Error>;
|
|
|
|
}
|
|
|
|
|
|
|
|
pub trait SerializeReal: SerializeRealPrimitive<u8> {
|
|
|
|
}
|
|
|
|
|
2019-01-21 04:39:21 +00:00
|
|
|
pub trait SerializeDict {
|
2019-01-21 13:25:44 +00:00
|
|
|
type Error;
|
2019-01-21 04:39:21 +00:00
|
|
|
|
|
|
|
fn serialize_kv<K, V>(&mut self, key: K, value: V) -> Result<(), Self::Error>
|
|
|
|
where
|
|
|
|
K: Serialize,
|
|
|
|
V: Serialize;
|
|
|
|
|
|
|
|
fn end(self) -> Result<(), Self::Error>;
|
|
|
|
}
|
|
|
|
|
|
|
|
pub trait SerializeList {
|
2019-01-21 13:25:44 +00:00
|
|
|
type Error;
|
2019-01-21 04:39:21 +00:00
|
|
|
|
|
|
|
fn serialize_item<I>(&mut self, item: I) -> Result<(), Self::Error>
|
|
|
|
where I: Serialize;
|
|
|
|
|
|
|
|
fn end(self) -> Result<(), Self::Error>;
|
|
|
|
}
|
|
|
|
|
|
|
|
pub trait SerializeMultilineText {
|
2019-01-21 13:25:44 +00:00
|
|
|
type Error;
|
2019-01-21 04:39:21 +00:00
|
|
|
|
|
|
|
fn serialize_line(&mut self, line: &str) -> Result<(), Self::Error>;
|
|
|
|
|
|
|
|
fn end(self) -> Result<(), Self::Error>;
|
|
|
|
}
|
|
|
|
|
2019-01-20 14:26:37 +00:00
|
|
|
pub trait Serializer: Sized {
|
2019-01-21 13:25:44 +00:00
|
|
|
type Error;
|
2019-01-20 14:26:37 +00:00
|
|
|
|
2019-01-22 06:04:44 +00:00
|
|
|
type SerializeReal: SerializeReal;
|
2019-01-21 04:39:21 +00:00
|
|
|
type SerializeDict: SerializeDict;
|
|
|
|
type SerializeList: SerializeList;
|
|
|
|
type SerializeMultilineText: SerializeMultilineText;
|
|
|
|
|
2019-01-20 14:26:37 +00:00
|
|
|
fn serialize_any<T>(self, any: T) -> Result<(), Self::Error>
|
|
|
|
where
|
|
|
|
T: Serialize
|
|
|
|
{
|
|
|
|
any.serialize(self)
|
|
|
|
}
|
|
|
|
|
2019-01-22 06:04:44 +00:00
|
|
|
fn serialize_real<R>(self, r: R) -> Result<(), Self::Error>
|
|
|
|
where Self::SerializeReal: SerializeRealPrimitive<R>
|
|
|
|
{
|
|
|
|
Self::SerializeReal::serialize_real_primitive(r)
|
|
|
|
//Ok(C::RealSerializer::serialize_real::<W>(&mut self.out, r)?)
|
|
|
|
//Ok(())
|
|
|
|
}
|
|
|
|
|
2019-01-20 14:26:37 +00:00
|
|
|
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<Item = &'a str>;
|
|
|
|
|
|
|
|
fn serialize_unit<'a, V>(self, name: &'a str, value: V) -> Result<(), Self::Error>
|
|
|
|
where V: Serialize;
|
|
|
|
|
2019-01-21 04:39:21 +00:00
|
|
|
fn serialize_list_parts(self) -> Result<Self::SerializeList, Self::Error>;
|
|
|
|
fn serialize_dict_parts(self) -> Result<Self::SerializeDict, Self::Error>;
|
|
|
|
fn serialize_multiline_text_parts(self) -> Result<Self::SerializeMultilineText, Self::Error>;
|
2019-01-20 14:26:37 +00:00
|
|
|
|
|
|
|
fn serialize_list<V, L>(self, list: L) -> Result<(), Self::Error>
|
2019-01-21 04:39:21 +00:00
|
|
|
where
|
|
|
|
V: Serialize,
|
|
|
|
L: IntoIterator<Item = V>;
|
|
|
|
|
|
|
|
fn serialize_dict<K, V, D>(self, dict: D) -> Result<(), Self::Error>
|
|
|
|
where
|
|
|
|
K: Serialize,
|
|
|
|
V: Serialize,
|
|
|
|
D: IntoIterator<Item = (K, V)>;
|
2019-01-20 14:26:37 +00:00
|
|
|
}
|