sim_lib_auto_core/
read_construct.rs1use sim_kernel::{Expr, Symbol};
4
5use crate::VehicleId;
6
7pub fn vehicle_read_construct(vehicle: &VehicleId) -> Expr {
9 read_construct_expr(
10 vehicle_class_symbol(),
11 vec![
12 Expr::Symbol(Symbol::new("v0")),
13 Expr::String(vehicle.namespace.clone()),
14 Expr::String(vehicle.key.clone()),
15 ],
16 )
17}
18
19pub fn text_read_construct_expr(class: &str, args: Vec<Expr>) -> Expr {
21 read_construct_expr(symbol_text(class), args)
22}
23
24pub fn read_construct_expr(class: Symbol, args: Vec<Expr>) -> Expr {
26 Expr::Extension {
27 tag: Symbol::qualified("citizen", "read-construct"),
28 payload: Box::new(Expr::Vector(
29 std::iter::once(Expr::Symbol(class)).chain(args).collect(),
30 )),
31 }
32}
33
34fn vehicle_class_symbol() -> Symbol {
35 Symbol::qualified("auto", "VehicleId")
36}
37
38fn symbol_text(text: &str) -> Symbol {
39 if let Some((namespace, name)) = text.split_once('/') {
40 Symbol::qualified(namespace, name)
41 } else {
42 Symbol::new(text)
43 }
44}