diff --git a/Cargo.toml b/Cargo.toml index 529e116..e71028c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,4 @@ edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -serde = "1.0" - -[dev-dependencies] -trybuild = "1.0" +serde = "1.0" \ No newline at end of file diff --git a/src/error.rs b/src/error.rs new file mode 100644 index 0000000..7e681c3 --- /dev/null +++ b/src/error.rs @@ -0,0 +1,16 @@ +use serde::ser; + +#[derive(Debug)] +pub struct CoronaError(String); + +impl std::fmt::Display for CoronaError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { todo!() } +} + +impl std::error::Error for CoronaError {} + +impl ser::Error for CoronaError { + fn custom(msg:T)->Self where T: std::fmt::Display { + Self(msg.to_string()) + } +} \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index ca5090e..5ecaf2e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,209 +1,2 @@ -use serde::ser; -use std::io::Write; - -pub struct Corona(W); - -impl ser::Serializer for Corona { - type Ok = (); - type Error = CoronaError; - type SerializeSeq = Corona; - type SerializeTuple = Corona; - type SerializeTupleStruct = Corona; - type SerializeTupleVariant = Corona; - type SerializeMap = Corona; - type SerializeStruct = Corona; - type SerializeStructVariant = Corona; - - fn serialize_bool(self, v: bool) -> Result { todo!() } - - fn serialize_i8(self, v: i8) -> Result { todo!() } - - fn serialize_i16(self, v: i16) -> Result { todo!() } - - fn serialize_i32(self, v: i32) -> Result { todo!() } - - fn serialize_i64(self, v: i64) -> Result { todo!() } - - fn serialize_u8(self, v: u8) -> Result { todo!() } - - fn serialize_u16(self, v: u16) -> Result { todo!() } - - fn serialize_u32(self, v: u32) -> Result { todo!() } - - fn serialize_u64(self, v: u64) -> Result { todo!() } - - fn serialize_f32(self, v: f32) -> Result { todo!() } - - fn serialize_f64(self, v: f64) -> Result { todo!() } - - fn serialize_char(self, v: char) -> Result { todo!() } - - fn serialize_str(self, v: &str) -> Result { todo!() } - - fn serialize_bytes(self, v: &[u8]) -> Result { todo!() } - - fn serialize_none(self) -> Result { todo!() } - - fn serialize_some(self, value: &T) -> Result - where - T: serde::Serialize { todo!() } - - fn serialize_unit(self) -> Result { todo!() } - - fn serialize_unit_struct(self, name: &'static str) -> Result { todo!() } - - fn serialize_unit_variant( - self, - name: &'static str, - variant_index: u32, - variant: &'static str, - ) -> Result { todo!() } - - fn serialize_newtype_struct( - self, - name: &'static str, - value: &T, - ) -> Result - where - T: serde::Serialize { todo!() } - - fn serialize_newtype_variant( - self, - name: &'static str, - variant_index: u32, - variant: &'static str, - value: &T, - ) -> Result - where - T: serde::Serialize { todo!() } - - fn serialize_seq(self, len: Option) -> Result { todo!() } - - fn serialize_tuple(self, len: usize) -> Result { todo!() } - - fn serialize_tuple_struct( - self, - name: &'static str, - len: usize, - ) -> Result { todo!() } - - fn serialize_tuple_variant( - self, - name: &'static str, - variant_index: u32, - variant: &'static str, - len: usize, - ) -> Result { todo!() } - - fn serialize_map(self, len: Option) -> Result { todo!() } - - fn serialize_struct( - self, - name: &'static str, - len: usize, - ) -> Result { todo!() } - - fn serialize_struct_variant( - self, - name: &'static str, - variant_index: u32, - variant: &'static str, - len: usize, - ) -> Result { todo!() } - - fn collect_str(self, value: &T) -> Result - where - T: std::fmt::Display { todo!() } - -} - -impl ser::SerializeSeq for Corona { - type Ok = (); - type Error = CoronaError; - fn serialize_element(&mut self, value: &T) -> Result<(), Self::Error> - where - T: serde::Serialize { todo!() } - fn end(self) -> Result { todo!() } - -} -impl ser::SerializeTuple for Corona { - type Ok = (); - type Error = CoronaError; - fn serialize_element(&mut self, value: &T) -> Result<(), Self::Error> - where - T: serde::Serialize { todo!() } - fn end(self) -> Result { todo!() } - -} -impl ser::SerializeTupleStruct for Corona { - type Ok = (); - type Error = CoronaError; - fn serialize_field(&mut self, value: &T) -> Result<(), Self::Error> - where - T: serde::Serialize { todo!() } - fn end(self) -> Result { todo!() } - -} -impl ser::SerializeTupleVariant for Corona { - type Ok = (); - type Error = CoronaError; - fn serialize_field(&mut self, value: &T) -> Result<(), Self::Error> - where - T: serde::Serialize { todo!() } - fn end(self) -> Result { todo!() } - -} -impl ser::SerializeMap for Corona { - type Ok = (); - type Error = CoronaError; - fn serialize_key(&mut self, key: &T) -> Result<(), Self::Error> - where - T: serde::Serialize { todo!() } - fn serialize_value(&mut self, value: &T) -> Result<(), Self::Error> - where - T: serde::Serialize { todo!() } - fn end(self) -> Result { todo!() } - -} -impl ser::SerializeStruct for Corona { - type Ok = (); - type Error = CoronaError; - fn serialize_field( - &mut self, - key: &'static str, - value: &T, - ) -> Result<(), Self::Error> - where - T: serde::Serialize { todo!() } - fn end(self) -> Result { todo!() } - -} -impl ser::SerializeStructVariant for Corona { - type Ok = (); - type Error = CoronaError; - fn serialize_field( - &mut self, - key: &'static str, - value: &T, - ) -> Result<(), Self::Error> - where - T: serde::Serialize { todo!() } - fn end(self) -> Result { todo!() } - -} - -#[derive(Debug)] -pub struct CoronaError(String); - -impl std::fmt::Display for CoronaError { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { todo!() } -} - -impl std::error::Error for CoronaError { - -} -impl ser::Error for CoronaError { - fn custom(msg:T)->Self where T: std::fmt::Display { - Self(msg.to_string()) - } -} \ No newline at end of file +pub mod ser; +pub mod error; \ No newline at end of file diff --git a/src/ser.rs b/src/ser.rs new file mode 100644 index 0000000..9e30842 --- /dev/null +++ b/src/ser.rs @@ -0,0 +1,194 @@ +use serde::ser; +use std::io::Write; +use crate::error::CoronaError; + +pub struct Corona(W); + +impl ser::Serializer for Corona { + type Ok = (); + type Error = CoronaError; + type SerializeSeq = Corona; + type SerializeTuple = Corona; + type SerializeTupleStruct = Corona; + type SerializeTupleVariant = Corona; + type SerializeMap = Corona; + type SerializeStruct = Corona; + type SerializeStructVariant = Corona; + + fn serialize_bool(self, v: bool) -> Result { todo!() } + + fn serialize_i8(self, v: i8) -> Result { todo!() } + + fn serialize_i16(self, v: i16) -> Result { todo!() } + + fn serialize_i32(self, v: i32) -> Result { todo!() } + + fn serialize_i64(self, v: i64) -> Result { todo!() } + + fn serialize_u8(self, v: u8) -> Result { todo!() } + + fn serialize_u16(self, v: u16) -> Result { todo!() } + + fn serialize_u32(self, v: u32) -> Result { todo!() } + + fn serialize_u64(self, v: u64) -> Result { todo!() } + + fn serialize_f32(self, v: f32) -> Result { todo!() } + + fn serialize_f64(self, v: f64) -> Result { todo!() } + + fn serialize_char(self, v: char) -> Result { todo!() } + + fn serialize_str(self, v: &str) -> Result { todo!() } + + fn serialize_bytes(self, v: &[u8]) -> Result { todo!() } + + fn serialize_none(self) -> Result { todo!() } + + fn serialize_some(self, value: &T) -> Result + where + T: serde::Serialize { todo!() } + + fn serialize_unit(self) -> Result { todo!() } + + fn serialize_unit_struct(self, name: &'static str) -> Result { todo!() } + + fn serialize_unit_variant( + self, + name: &'static str, + variant_index: u32, + variant: &'static str, + ) -> Result { todo!() } + + fn serialize_newtype_struct( + self, + name: &'static str, + value: &T, + ) -> Result + where + T: serde::Serialize { todo!() } + + fn serialize_newtype_variant( + self, + name: &'static str, + variant_index: u32, + variant: &'static str, + value: &T, + ) -> Result + where + T: serde::Serialize { todo!() } + + fn serialize_seq(self, len: Option) -> Result { todo!() } + + fn serialize_tuple(self, len: usize) -> Result { todo!() } + + fn serialize_tuple_struct( + self, + name: &'static str, + len: usize, + ) -> Result { todo!() } + + fn serialize_tuple_variant( + self, + name: &'static str, + variant_index: u32, + variant: &'static str, + len: usize, + ) -> Result { todo!() } + + fn serialize_map(self, len: Option) -> Result { todo!() } + + fn serialize_struct( + self, + name: &'static str, + len: usize, + ) -> Result { todo!() } + + fn serialize_struct_variant( + self, + name: &'static str, + variant_index: u32, + variant: &'static str, + len: usize, + ) -> Result { todo!() } + + fn collect_str(self, value: &T) -> Result + where + T: std::fmt::Display { todo!() } + +} + +impl ser::SerializeSeq for Corona { + type Ok = (); + type Error = CoronaError; + fn serialize_element(&mut self, value: &T) -> Result<(), Self::Error> + where + T: serde::Serialize { todo!() } + fn end(self) -> Result { todo!() } + +} +impl ser::SerializeTuple for Corona { + type Ok = (); + type Error = CoronaError; + fn serialize_element(&mut self, value: &T) -> Result<(), Self::Error> + where + T: serde::Serialize { todo!() } + fn end(self) -> Result { todo!() } + +} +impl ser::SerializeTupleStruct for Corona { + type Ok = (); + type Error = CoronaError; + fn serialize_field(&mut self, value: &T) -> Result<(), Self::Error> + where + T: serde::Serialize { todo!() } + fn end(self) -> Result { todo!() } + +} +impl ser::SerializeTupleVariant for Corona { + type Ok = (); + type Error = CoronaError; + fn serialize_field(&mut self, value: &T) -> Result<(), Self::Error> + where + T: serde::Serialize { todo!() } + fn end(self) -> Result { todo!() } + +} +impl ser::SerializeMap for Corona { + type Ok = (); + type Error = CoronaError; + fn serialize_key(&mut self, key: &T) -> Result<(), Self::Error> + where + T: serde::Serialize { todo!() } + fn serialize_value(&mut self, value: &T) -> Result<(), Self::Error> + where + T: serde::Serialize { todo!() } + fn end(self) -> Result { todo!() } + +} +impl ser::SerializeStruct for Corona { + type Ok = (); + type Error = CoronaError; + fn serialize_field( + &mut self, + key: &'static str, + value: &T, + ) -> Result<(), Self::Error> + where + T: serde::Serialize { todo!() } + fn end(self) -> Result { todo!() } + +} +impl ser::SerializeStructVariant for Corona { + type Ok = (); + type Error = CoronaError; + fn serialize_field( + &mut self, + key: &'static str, + value: &T, + ) -> Result<(), Self::Error> + where + T: serde::Serialize { todo!() } + fn end(self) -> Result { todo!() } + +} \ No newline at end of file