rtcm_rs/
source_repr.rs

1use core::fmt::Display;
2
3pub struct SourceOutput<'a, S: SourceRepr> {
4    object: &'a S,
5}
6
7pub trait SourceRepr {
8    fn to_source(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result;
9}
10
11impl<S: SourceRepr> Display for SourceOutput<'_, S> {
12    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
13        self.object.to_source(f)
14    }
15}
16
17impl<'a, S: SourceRepr> SourceOutput<'a, S> {
18    pub fn new(object: &'a S) -> Self {
19        SourceOutput { object }
20    }
21}
22
23macro_rules! source_repr_prim {
24    ($t:ty) => {
25        impl SourceRepr for $t {
26            fn to_source(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
27                write!(f, "{:?}", self)
28            }
29        }
30    };
31}
32
33source_repr_prim!(u8);
34source_repr_prim!(u16);
35source_repr_prim!(u32);
36source_repr_prim!(u64);
37source_repr_prim!(i8);
38source_repr_prim!(i16);
39source_repr_prim!(i32);
40source_repr_prim!(i64);
41source_repr_prim!(usize);
42source_repr_prim!(isize);
43source_repr_prim!(f32);
44source_repr_prim!(f64);
45source_repr_prim!(char);
46
47source_repr_prim!(Option<u8>);
48source_repr_prim!(Option<u16>);
49source_repr_prim!(Option<u32>);
50source_repr_prim!(Option<u64>);
51source_repr_prim!(Option<i8>);
52source_repr_prim!(Option<i16>);
53source_repr_prim!(Option<i32>);
54source_repr_prim!(Option<i64>);
55source_repr_prim!(Option<usize>);
56source_repr_prim!(Option<isize>);
57source_repr_prim!(Option<f32>);
58source_repr_prim!(Option<f64>);