use core::fmt::Write as FmtWrite; use crate::se::{Write, SerializerError}; use super::{ dec_buf::DecBuf, RealSerializer, PrimitiveRealSerializer }; macro_rules! impl_write_real_int_for_fast_serializer { ($($prim:ident)*) => { $(impl PrimitiveRealSerializer<$prim> for FastRealSerializer { fn serialize_real(out: &mut W, r: $prim) -> Result<(), W::Error> { let mut buf = itoa::Buffer::new(); let real_str = buf.format(r); out.write(real_str.as_bytes()) } })* } } macro_rules! impl_write_real_float_for_fast_serializer { ($($prim:ident)*) => { $(impl PrimitiveRealSerializer<$prim> for FastRealSerializer { fn serialize_real(out: &mut W, r: $prim) -> Result<(), W::Error> { let mut buf = DecBuf::new(); write!(buf, "{}", r).map_err(|_| SerializerError::Unexpected("failed to format real") )?; out.write(buf.as_bytes()) } })* } } pub struct FastRealSerializer; impl_write_real_int_for_fast_serializer!( u8 u16 u32 u64 i8 i16 i32 i64 ); impl_write_real_float_for_fast_serializer!( f32 f64 ); impl RealSerializer for FastRealSerializer {}