1use sim_kernel::{Expr, Symbol};
4use sim_value::build;
5
6use crate::surface::SurfaceCaps;
7use crate::{Mode, UNIVERSAL_EDITOR_ID, UNIVERSAL_VIEW_ID, universal_scene};
8
9pub fn universal_lens_demo() -> Expr {
11 let value = build::map(vec![
12 (
13 "class",
14 Expr::Symbol(Symbol::qualified("demo", "ViewValue")),
15 ),
16 ("title", build::text("Universal lens sample")),
17 ]);
18 let surface = SurfaceCaps::from_preset("webui", "cookbook.web")
19 .expect("webui is a built-in surface preset");
20 let scene = universal_scene(&value, Mode::Builder);
21 debug_assert!(sim_lib_scene::validate_scene(&scene).is_ok());
22 build::map(vec![
23 ("surface", surface.to_expr()),
24 ("view-lens", Expr::Symbol(Symbol::new(UNIVERSAL_VIEW_ID))),
25 (
26 "editor-lens",
27 Expr::Symbol(Symbol::new(UNIVERSAL_EDITOR_ID)),
28 ),
29 ("scene", scene),
30 ])
31}
32
33#[cfg(test)]
34mod tests {
35 use super::*;
36 use sim_value::access;
37
38 #[test]
39 fn universal_lens_demo_carries_surface_caps_and_valid_scene() {
40 let demo = universal_lens_demo();
41 let surface = access::field(&demo, "surface").expect("surface descriptor");
42 SurfaceCaps::from_expr(surface).expect("surface caps parse");
43 let scene = access::field(&demo, "scene").expect("scene");
44 sim_lib_scene::validate_scene(scene).expect("scene validates");
45 }
46}