use derive_new::new;
use getset::Getters;
#[derive(Debug, Clone)]
pub enum Value<S> {
Null,
Bool(bool),
Int(i64),
Float(f64),
String(S),
Array(Vec<(ArrayKey<S>, Value<S>)>),
Object(Object<S>),
Serializable(Serializable<S>),
Reference(Ref),
}
#[derive(Debug, Clone)]
pub enum ArrayKey<S> {
Int(i64),
String(S),
}
#[derive(Debug, Clone, Getters, new)]
pub struct Object<S> {
#[getset(get)]
class: S,
#[getset(get)]
properties: Vec<(PropertyName<S>, Value<S>)>,
}
#[derive(Debug, Clone, Getters, new)]
pub struct PropertyName<S> {
#[getset(get)]
vis: PropertyVis<S>,
#[getset(get)]
name: S,
}
#[derive(Debug, Clone)]
pub enum PropertyVis<S> {
Private(S),
Protected,
Public,
}
#[derive(Debug, Clone, Getters, new)]
pub struct Serializable<S> {
#[getset(get)]
class: S,
#[getset(get)]
data: S,
}
#[derive(Debug, Clone, Copy, new)]
pub struct Ref(usize);