tiny_serde/
serialize.rs

1use std::collections::HashMap;
2
3use crate::{Number, Value};
4
5pub trait Serialize {
6    fn serialize(&self) -> Value;
7}
8
9pub fn to_string<S: Serialize>(value: &S) -> String {
10    value.serialize().to_string()
11}
12
13impl Serialize for String {
14    fn serialize(&self) -> Value {
15        Value::String(self.clone())
16    }
17}
18
19impl<S: Serialize> Serialize for Option<S> {
20    fn serialize(&self) -> Value {
21        match self {
22            Some(value) => value.serialize(),
23            None => Value::Null,
24        }
25    }
26}
27
28impl Serialize for bool {
29    fn serialize(&self) -> Value {
30        Value::Boolean(*self)
31    }
32}
33
34impl Serialize for f64 {
35    fn serialize(&self) -> Value {
36        Value::Number(Number::Decimal(*self))
37    }
38}
39
40impl Serialize for u128 {
41    fn serialize(&self) -> Value {
42        Value::Number(Number::Integer(*self))
43    }
44}
45
46impl Serialize for i128 {
47    fn serialize(&self) -> Value {
48        Value::Number(Number::SignedInteger(*self))
49    }
50}
51
52impl Serialize for Vec<Value> {
53    fn serialize(&self) -> Value {
54        Value::Array(self.clone())
55    }
56}
57
58impl Serialize for HashMap<String, Value> {
59    fn serialize(&self) -> Value {
60        Value::Object(self.clone())
61    }
62}