1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
use bumpalo::Bump;
use serde::{Serialize, Serializer};

use crate::variable::{ser, Variable};

impl<'arena> Serialize for Variable<'arena> {
    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
    where
        S: Serializer,
    {
        match self {
            Variable::Null => serializer.serialize_unit(),
            Variable::Bool(v) => serializer.serialize_bool(*v),
            Variable::Number(v) => ser::Serialize::serialize(v, serializer),
            Variable::String(v) => serializer.serialize_str(v),
            Variable::Array(v) => serializer.collect_seq(v.iter()),
            Variable::Object(v) => serializer.collect_map(v.iter()),
        }
    }
}

#[allow(dead_code)]
pub struct VariableSerializer<'arena> {
    arena: &'arena Bump,
}

impl<'arena> VariableSerializer<'arena> {
    #[allow(dead_code)]
    pub fn new_in(arena: &'arena Bump) -> Self {
        Self { arena }
    }
}