This library provides a simple procedural macro for fast implementing serialize methods in serde::Serializer trait.
[dependencies]
impl_serialize = "3.1"Read about using metavariables inside impl_serialize!
use impl_serialize::impl_serialize;use serde::ser;use thiserror::Error;#[derive(Debug,Error)]enumSerializationError{#[error("Other error")]OtherError,#[error("Cannot serialize value from {0}")]CannotSerializeFrom(String),#[error("Custom({0})")]Custom(String)}impl serde::ser::ErrorforSerializationError{fncustom<T>(msg:T) -> SelfwhereT: std::fmt::Display{SerializationError::Custom(msg.to_string())}}structMySerializer;impl ser::SerializerforMySerializer{typeOk = ();typeError = SerializationError;typeSerializeMap = ser::Impossible<Self::Ok,Self::Error>;typeSerializeSeq = ser::Impossible<Self::Ok,Self::Error>;typeSerializeStruct = ser::Impossible<Self::Ok,Self::Error>;typeSerializeStructVariant = ser::Impossible<Self::Ok,Self::Error>;typeSerializeTuple = ser::Impossible<Self::Ok,Self::Error>;typeSerializeTupleStruct = ser::Impossible<Self::Ok,Self::Error>;typeSerializeTupleVariant = ser::Impossible<Self::Ok,Self::Error>;//value_type is metavariable (&str) what represents any serializing value type.//for example, value_type will be "i8" when seializing i8 or "bytes" when &[u8] (bytes);//with value_typeimpl_serialize!(Err(SerializationError::CannotSerializeFrom(value_type.to_string())),bool);//without value_typeimpl_serialize!(Err(SerializationError::OtherError),char);//for many typesimpl_serialize!(Err(SerializationError::CannotSerializeFrom(value_type.to_string())),[
bytes,i8,i16,i32,i64,u8,u16,u32,u64,f32,f64,str,
none, some, unit,
unit_struct, unit_variant,
newtype_struct, newtype_variant,
seq, map,
tuple, tuple_struct, tuple_variant,struct, struct_variant
]);}