linkspace/commons/
fset.rs

1use anyhow::{Context, anyhow};
2pub use linkspace_commons_internal::fset::FSet;
3use linkspace_commons_internal::fset::FSetEntry;
4use linkspace_core::point::abe::convert::parse_and_eval;
5
6use crate::prelude::*;
7
8pub fn lkc_fset(st: &str, scope: &dyn LkEnv) -> LkResult<FSet> {
9    let mut this = FSet::default();
10    lkc_fset_add(&mut this, st, scope)?;
11    Ok(this)
12}
13pub fn lkc_fset_add(fs: &mut FSet, st: &str, scope: &dyn LkEnv) -> LkResult<()> {
14    let mut entries = vec![];
15    for (i, line) in st.lines().enumerate() {
16        let e: FSetEntry = parse_and_eval(line, scope.as_scope().as_dyn(), false)
17            .with_context(|| anyhow!("[{i}] {line}"))?;
18        entries.push(e);
19    }
20    for e in entries {
21        fs.push(e);
22    }
23    Ok(())
24}
25pub fn lkc_fset_test(fs: &FSet, point: &PointPtr) -> Option<u32> {
26    fs.test(point)
27}
28pub fn lkc_fset_test_values(
29    fs: &FSet,
30    domain: &Domain,
31    group: &GroupID,
32    pubkey: &PubKey,
33) -> Option<u32> {
34    fs.test_values(domain, group, pubkey)
35}