Skip to main content

sim_lib_bridge/
receipt.rs

1use sim_codec_bridge::{BridgeHeader, BridgePacket, BridgePart, BridgeProvenance};
2use sim_kernel::{Expr, Result, Symbol};
3
4use crate::report::BridgeReport;
5
6/// Runtime symbol for the receipt function.
7pub fn receipt_symbol() -> Symbol {
8    Symbol::qualified("bridge", "receipt")
9}
10
11/// Builds a receipt packet carrying a report as a normal BRIDGE packet.
12pub fn receipt_packet_for_report(
13    report: &BridgeReport,
14    from: impl Into<String>,
15) -> Result<BridgePacket> {
16    Ok(BridgePacket {
17        header: BridgeHeader {
18            cid: None,
19            move_kind: Symbol::new("receipt"),
20            from: from.into(),
21            to: Vec::new(),
22            role: Symbol::new("checker"),
23            parents: vec![report.packet_cid.clone()],
24            task: Symbol::new("R1"),
25            output: Symbol::new("R1"),
26            ceiling: Vec::new(),
27            context: Vec::new(),
28            provenance: BridgeProvenance::default(),
29        },
30        body: vec![BridgePart {
31            id: Symbol::new("R1"),
32            kind: Symbol::qualified("bridge", "Receipt"),
33            payload: Expr::Map(vec![sim_value::build::entry("report", report.to_expr())]),
34        }],
35        warrant: None,
36    })
37}