rust-sen/sehn/src/se/mod.rs

107 lines
2.9 KiB
Rust

mod base;
mod impls;
pub use self::base::*;
pub trait Serialize {
fn serialize<S>(&self, s: S) -> Result<(), S::Error>
where S: Serializer;
}
pub trait SerializeRealPrimitive<R> {
type Error;
fn serialize_real_primitive(self, real: R) -> Result<(), Self::Error>;
}
pub trait SerializeReal: SerializeRealPrimitive<u8> {
}
pub trait SerializeDict {
type Error;
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 {
type Error;
fn serialize_item<I>(&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<T>(self, any: T) -> Result<(), Self::Error>
where
T: Serialize
{
any.serialize(self)
}
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(())
}
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;
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>;
fn serialize_list<V, L>(self, list: L) -> Result<(), Self::Error>
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)>;
}