sim_lib_sequence/
claims.rs1use sim_kernel::{
2 Cx, LibId, OpKey, Result, Symbol,
3 standard::{publish_organ_claims, publish_organ_claims_for_lib},
4};
5
6use crate::runtime::SeqOp;
7
8pub fn sequence_organ_symbol() -> Symbol {
13 Symbol::qualified("organ", "sequence")
14}
15
16pub fn sequence_persistent_op_key() -> OpKey {
18 sequence_op_key("persistent")
19}
20
21pub fn sequence_lazy_op_key() -> OpKey {
23 sequence_op_key("lazy")
24}
25
26pub fn sequence_map_op_key() -> OpKey {
28 sequence_op_key("map")
29}
30
31pub fn sequence_filter_op_key() -> OpKey {
33 sequence_op_key("filter")
34}
35
36pub fn sequence_reduce_op_key() -> OpKey {
38 sequence_op_key("reduce")
39}
40
41pub fn sequence_for_op_key() -> OpKey {
43 sequence_op_key("for")
44}
45
46pub fn sequence_transduce_op_key() -> OpKey {
48 sequence_op_key("transduce")
49}
50
51pub fn sequence_declared_op_keys() -> Vec<OpKey> {
57 [
58 sequence_persistent_op_key(),
59 sequence_lazy_op_key(),
60 sequence_map_op_key(),
61 sequence_filter_op_key(),
62 sequence_reduce_op_key(),
63 sequence_for_op_key(),
64 sequence_transduce_op_key(),
65 ]
66 .into()
67}
68
69pub fn sequence_live_ops() -> Vec<(OpKey, Symbol)> {
71 vec![
72 (sequence_map_op_key(), SeqOp::Map.symbol()),
73 (sequence_filter_op_key(), SeqOp::Filter.symbol()),
74 (sequence_reduce_op_key(), SeqOp::Fold.symbol()),
75 ]
76}
77
78pub fn sequence_op_keys() -> Vec<OpKey> {
80 sequence_live_ops()
81 .into_iter()
82 .map(|(op_key, _export_symbol)| op_key)
83 .collect()
84}
85
86pub fn publish_sequence_organ_claims(cx: &mut Cx) -> Result<()> {
92 publish_organ_claims(cx, sequence_organ_symbol(), sequence_op_keys())
93}
94
95pub fn publish_sequence_organ_claims_for_lib(cx: &mut Cx, lib_id: LibId) -> Result<()> {
97 publish_organ_claims_for_lib(cx, lib_id, sequence_organ_symbol(), sequence_op_keys())
98}
99
100fn sequence_op_key(name: &str) -> OpKey {
101 OpKey::new(Symbol::new("sequence"), Symbol::new(name), 1)
102}