Skip to main content

sim_lib_sequence/
claims.rs

1use sim_kernel::{
2    Cx, LibId, OpKey, Result, Symbol,
3    standard::{publish_organ_claims, publish_organ_claims_for_lib},
4};
5
6/// Symbol naming the sequence organ as a claim subject.
7///
8/// Identifies this crate's behavior in the kernel claim store so the organ and
9/// its operations project into a browse Card.
10pub fn sequence_organ_symbol() -> Symbol {
11    Symbol::qualified("organ", "sequence")
12}
13
14/// Operation key for persistent sequence construction.
15pub fn sequence_persistent_op_key() -> OpKey {
16    sequence_op_key("persistent")
17}
18
19/// Operation key for lazy sequence construction.
20pub fn sequence_lazy_op_key() -> OpKey {
21    sequence_op_key("lazy")
22}
23
24/// Operation key for sequence mapping.
25pub fn sequence_map_op_key() -> OpKey {
26    sequence_op_key("map")
27}
28
29/// Operation key for sequence filtering.
30pub fn sequence_filter_op_key() -> OpKey {
31    sequence_op_key("filter")
32}
33
34/// Operation key for sequence reduction.
35pub fn sequence_reduce_op_key() -> OpKey {
36    sequence_op_key("reduce")
37}
38
39/// Operation key for sequence iteration (`for-each`).
40pub fn sequence_for_op_key() -> OpKey {
41    sequence_op_key("for")
42}
43
44/// Operation key for transducer-driven sequence pipelines.
45pub fn sequence_transduce_op_key() -> OpKey {
46    sequence_op_key("transduce")
47}
48
49/// All operation keys the sequence organ advertises.
50///
51/// The canonical operation set published with
52/// [`publish_sequence_organ_claims`].
53pub fn sequence_op_keys() -> Vec<OpKey> {
54    [
55        sequence_persistent_op_key(),
56        sequence_lazy_op_key(),
57        sequence_map_op_key(),
58        sequence_filter_op_key(),
59        sequence_reduce_op_key(),
60        sequence_for_op_key(),
61        sequence_transduce_op_key(),
62    ]
63    .into()
64}
65
66/// Publish the sequence organ and its operation keys into the claim store.
67///
68/// Realizes the kernel organ-claim contract for this crate: the kernel defines
69/// claim and Card contracts, this records the concrete sequence organ so it is
70/// discoverable. See the [crate README](https://github.com/sim-nest/sim-runtime).
71pub fn publish_sequence_organ_claims(cx: &mut Cx) -> Result<()> {
72    publish_organ_claims(cx, sequence_organ_symbol(), sequence_op_keys())
73}
74
75/// Publish the sequence organ claims as part of a loaded lib receipt.
76pub fn publish_sequence_organ_claims_for_lib(cx: &mut Cx, lib_id: LibId) -> Result<()> {
77    publish_organ_claims_for_lib(cx, lib_id, sequence_organ_symbol(), sequence_op_keys())
78}
79
80fn sequence_op_key(name: &str) -> OpKey {
81    OpKey::new(Symbol::new("sequence"), Symbol::new(name), 1)
82}