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 {} |