tiny_json_rs/serializer/
serializers.rs

1use crate::lexer::{StringType, Token, TokenType};
2use crate::mapper::Value;
3use crate::serializer::Serialize;
4use alloc::string::{String, ToString};
5use alloc::vec::Vec;
6
7impl Serialize for u8 {
8    fn serialize(&self) -> Value {
9        Value::Token(Token {
10            token_type: TokenType::Int,
11            literal: self.to_string(),
12        })
13    }
14}
15
16impl Serialize for u16 {
17    fn serialize(&self) -> Value {
18        Value::Token(Token {
19            token_type: TokenType::Int,
20            literal: self.to_string(),
21        })
22    }
23}
24
25impl Serialize for u32 {
26    fn serialize(&self) -> Value {
27        Value::Token(Token {
28            token_type: TokenType::Int,
29            literal: self.to_string(),
30        })
31    }
32}
33
34impl Serialize for u64 {
35    fn serialize(&self) -> Value {
36        Value::Token(Token {
37            token_type: TokenType::Int,
38            literal: self.to_string(),
39        })
40    }
41}
42
43impl Serialize for usize {
44    fn serialize(&self) -> Value {
45        Value::Token(Token {
46            token_type: TokenType::Int,
47            literal: self.to_string(),
48        })
49    }
50}
51
52impl Serialize for i8 {
53    fn serialize(&self) -> Value {
54        Value::Token(Token {
55            token_type: TokenType::Int,
56            literal: self.to_string(),
57        })
58    }
59}
60
61impl Serialize for i16 {
62    fn serialize(&self) -> Value {
63        Value::Token(Token {
64            token_type: TokenType::Int,
65            literal: self.to_string(),
66        })
67    }
68}
69
70impl Serialize for i32 {
71    fn serialize(&self) -> Value {
72        Value::Token(Token {
73            token_type: TokenType::Int,
74            literal: self.to_string(),
75        })
76    }
77}
78
79impl Serialize for i64 {
80    fn serialize(&self) -> Value {
81        Value::Token(Token {
82            token_type: TokenType::Int,
83            literal: self.to_string(),
84        })
85    }
86}
87
88impl Serialize for f32 {
89    fn serialize(&self) -> Value {
90        Value::Token(Token {
91            token_type: TokenType::Float,
92            literal: self.to_string(),
93        })
94    }
95}
96
97impl Serialize for f64 {
98    fn serialize(&self) -> Value {
99        Value::Token(Token {
100            token_type: TokenType::Float,
101            literal: self.to_string(),
102        })
103    }
104}
105
106impl Serialize for bool {
107    fn serialize(&self) -> Value {
108        Value::Token(Token {
109            token_type: TokenType::ReservedString,
110            literal: self.to_string(),
111        })
112    }
113}
114
115impl Serialize for String {
116    fn serialize(&self) -> Value {
117        Value::Token(Token {
118            token_type: TokenType::String(StringType::ComplexString),
119            literal: self.to_string(),
120        })
121    }
122}
123
124impl Serialize for char {
125    fn serialize(&self) -> Value {
126        Value::Token(Token {
127            token_type: TokenType::String(StringType::SimpleString),
128            literal: self.to_string(),
129        })
130    }
131}
132
133impl<T> Serialize for Option<T>
134where
135    T: Serialize,
136{
137    fn serialize(&self) -> Value {
138        match self {
139            Some(val) => val.serialize(),
140            None => Value::Token(Token {
141                token_type: TokenType::ReservedString,
142                literal: String::from("null"),
143            }),
144        }
145    }
146}
147
148impl<T> Serialize for Vec<T>
149where
150    T: Serialize,
151{
152    fn serialize(&self) -> Value {
153        let mut array = Vec::new();
154        for val in self {
155            array.push(val.serialize());
156        }
157        Value::Array(array)
158    }
159}