Skip to main content

sim_lib_view_bridge/
cookbook.rs

1//! Cookbook fixtures for the BRIDGE packet review surface.
2
3use sim_codec_bridge::{
4    BridgeHeader, BridgePacket, BridgePart, BridgeProvenance, BridgeReceiptPayload,
5    stamp_packet_cid,
6};
7use sim_kernel::{Cx, DefaultFactory, EagerPolicy, Expr, Symbol};
8use sim_lib_view::surface::SurfaceCaps;
9use std::sync::Arc;
10
11/// Builds a packet review scene showing drafter, reviewer, and judge seats.
12pub fn packet_review_demo() -> Expr {
13    let mut cx = Cx::new(Arc::new(EagerPolicy), Arc::new(DefaultFactory));
14    let packet = sample_packet();
15    let caps = SurfaceCaps::from_preset("desktop", "cookbook").expect("desktop caps exist");
16    crate::bridge_packet_view(&mut cx, &packet, &caps).expect("demo packet renders")
17}
18
19fn sample_packet() -> BridgePacket {
20    stamp_packet_cid(&BridgePacket {
21        header: BridgeHeader {
22            cid: None,
23            move_kind: Symbol::new("receipt"),
24            from: "model:judge".to_owned(),
25            to: vec!["human:reviewer".to_owned(), "model:drafter".to_owned()],
26            role: Symbol::new("judge"),
27            parents: vec!["core/sha256-bridge-v1:merged#move=reply".to_owned()],
28            task: Symbol::new("Rc1"),
29            output: Symbol::new("Rc1"),
30            ceiling: Vec::new(),
31            context: Vec::new(),
32            provenance: BridgeProvenance::default(),
33        },
34        body: vec![BridgePart {
35            id: Symbol::new("Rc1"),
36            kind: Symbol::qualified("bridge", "Receipt"),
37            payload: BridgeReceiptPayload::new(
38                Symbol::new("accepted"),
39                vec!["body/O2/payload".to_owned()],
40            )
41            .to_expr(),
42        }],
43        warrant: None,
44    })
45    .expect("sample packet stamps")
46}
47
48#[cfg(test)]
49mod tests {
50    #[test]
51    fn packet_review_demo_is_a_scene() {
52        let scene = super::packet_review_demo();
53        sim_lib_scene::validate_scene(&scene).expect("demo scene validates");
54    }
55}