use sim_citizen_derive::Citizen;
use sim_kernel::{Error, Expr, Result, Symbol};
#[derive(Clone, Debug, Default, PartialEq, Citizen)]
#[citizen(symbol = "list/ConsList", version = 0)]
pub struct ConsListDescriptor {
#[citizen(with = "crate::citizen::expr_items")]
pub items: Vec<Expr>,
}
pub fn cons_list_class_symbol() -> Symbol {
Symbol::qualified("list", "ConsList")
}
pub(crate) mod expr_items {
use super::*;
pub fn encode(items: &[Expr]) -> Expr {
Expr::List(items.to_vec())
}
pub fn decode(expr: &Expr) -> Result<Vec<Expr>> {
let Expr::List(items) = expr else {
return Err(Error::Eval(
"list citizen field items: expected list".to_owned(),
));
};
Ok(items.clone())
}
}