Skip to main content

sim_lib_view/
lib.rs

1//! View/editor codec contracts, Shape-based lens dispatch, lens stack, and the
2//! universal default lens for SIM Web.
3//!
4//! A view is a codec object in the encode direction (`Value -> Scene`); an
5//! editor is a codec object in the decode direction
6//! (`(Value, Intent) -> Draft`, then `Draft -> operation`). A lens pairs a view
7//! with an optional editor. View selection is overload selection, so the
8//! dispatcher reuses the kernel `Shape` matcher rather than inventing a second
9//! selection ladder.
10//!
11//! This crate provides the lens [`contract`] (open metadata plus the view and
12//! editor traits), the Shape-based [`dispatch`] machinery, the universal
13//! default lens, the lens [`stack`], and experience [`mode`]s.
14//!
15//! # Example
16//!
17//! Any value opens in the universal default lens, rendered at the active mode's
18//! depth (Household, Builder, Systems):
19//!
20//! ```
21//! use sim_kernel::Expr;
22//! use sim_lib_view::{Mode, universal_scene};
23//!
24//! let scene = universal_scene(&Expr::Nil, Mode::Builder);
25//! assert!(sim_lib_scene::validate_scene(&scene).is_ok());
26//! ```
27
28#![forbid(unsafe_code)]
29#![deny(missing_docs)]
30
31pub mod bringup;
32mod citizen;
33pub mod codec;
34pub mod contract;
35pub mod cookbook;
36pub mod dispatch;
37pub mod embed;
38pub mod mode;
39pub mod palette;
40pub mod profiles;
41mod render;
42pub mod set_lens;
43pub mod stack;
44pub mod surface;
45pub mod universal;
46pub mod universal_editor;
47pub mod universal_view;
48
49pub use bringup::{
50    BringUpEntry, BringUpLedger, GLASSES_BRINGUP_FIXTURE, GLASSES_BRINGUP_FIXTURE_TEXT,
51    GLASSES_BRINGUP_KIND, GLASSES_BRINGUP_LANES, GLASSES_BRINGUP_NAMESPACE, HALO_BLE_DIRECT_LANE,
52    HALO_CAMERA_LANE, HALO_PHONE_RELAY_LANE, HALO_WEB_BLUETOOTH_LANE, VITURE_CARINA_LANE,
53    VITURE_LEGACY_IMU_LANE, VITURE_UVC_CAMERA_LANE, default_glasses_bringup_fixture,
54    glasses_bringup_fixture, glasses_bringup_fixture_names,
55};
56pub use citizen::{ViewLensDescriptor, view_lens_descriptor_class_symbol};
57pub use codec::{PairCodec, SurfaceCodec, roundtrip_holds};
58pub use contract::{Draft, Editor, Lens, LensKind, LensMeta, Operation, View};
59pub use cookbook::universal_lens_demo;
60pub use dispatch::{DispatchContext, DispatchOutcome, DispatchReason, LensRegistry};
61pub use embed::embed_scene;
62pub use mode::{Exposure, Mode, action_exposure, denied_scene, readonly_scene, universal_scene};
63pub use palette::{
64    A11y, Command, CommandKind, FocusDir, a11y_of, diagnostics_scene, filter_commands, focused_id,
65    move_focus, palette_intent, palette_scene, with_a11y, with_focus,
66};
67pub use profiles::{DEVICE_PRESETS, project_for_preset};
68pub use set_lens::{active_lens, apply_set_lens, empty_pane_lenses};
69pub use stack::LensStackEntry;
70pub use surface::{SurfaceCaps, SurfaceError};
71pub use universal::{UNIVERSAL_EDITOR_ID, UNIVERSAL_VIEW_ID, register_universal_default};
72pub use universal_editor::{EDIT_MODES, UniversalEditor, render_draft};
73pub use universal_view::{UniversalView, render_value};
74
75/// Marker id for the always-matching universal default lens (lowest quality).
76pub const UNIVERSAL_DEFAULT_LENS: &str = UNIVERSAL_VIEW_ID;
77
78/// Embedded cookbook recipe books shipped with this library.
79pub static RECIPES: sim_cookbook::EmbeddedDir =
80    include!(concat!(env!("OUT_DIR"), "/cookbook_recipes.rs"));
81
82#[cfg(test)]
83mod bringup_tests;
84#[cfg(test)]
85mod mode_tests;
86#[cfg(test)]
87mod stack_tests;
88#[cfg(test)]
89mod tests;
90#[cfg(test)]
91mod universal_tests;