47 lines
1.1 KiB
Rust
47 lines
1.1 KiB
Rust
|
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<W: Write>(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<W: Write>(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 {}
|