pub struct Kernel { /* private fields */ }Implementations§
Source§impl Kernel
impl Kernel
pub fn execute( &mut self, raw_target: impl AsRef<str>, body: Option<ExecuteValue>, ) -> Result<ExecuteValue, ExecuteError>
pub fn execute_ast( &mut self, target: MeTargetAst, body: Option<ExecuteValue>, ) -> Result<ExecuteValue, ExecuteError>
pub fn install_recipient_key( &mut self, recipient_key_id: &str, private_key: impl Into<Vec<u8>>, ) -> Result<&mut Self, ExecuteError>
pub fn uninstall_recipient_key(&mut self, recipient_key_id: &str) -> &mut Self
pub fn store_wrapped_key( &mut self, key_id: &str, envelope: Value, recipient_key_id: Option<String>, ) -> Result<&mut Self, ExecuteError>
pub fn read_wrapped_key(&self, key_id: &str) -> Result<Value, ExecuteError>
pub fn key_space_manifest(&self) -> BTreeMap<String, StoredWrappedKey>
Source§impl Kernel
impl Kernel
Sourcepub fn new() -> Self
pub fn new() -> Self
Examples found in repository?
examples/quickstart.rs (line 4)
3fn run() -> Result<(), Box<dyn std::error::Error>> {
4 let mut me = Kernel::new();
5
6 me.postulate("profile.name", "Jabellae")?;
7 me.postulate("wallet.income", 100_u64)?;
8 me.postulate("wallet.expenses", 40_u64)?;
9 me.derive("", "wallet.total", "wallet.income - wallet.expenses")?;
10
11 assert_eq!(me.read("wallet.total"), Some(&Value::from(60_u64)));
12 println!("wallet.total = {:?}", me.read("wallet.total"));
13
14 Ok(())
15}More examples
examples/operators.rs (line 4)
3fn run() -> Result<(), Box<dyn std::error::Error>> {
4 let mut me = Kernel::new();
5
6 me.claim_identity("Jabellae")?;
7 assert_eq!(me.active_identity(), Some("jabellae"));
8
9 me.postulate("wallet.income", 100_u64)?;
10 me.postulate("wallet.expenses", 40_u64)?;
11 me.derive("wallet", "total", "income - expenses")?;
12 assert_eq!(me.read("wallet.total"), Some(&Value::from(60_f64)));
13
14 me.pointer("profile.wallet", "wallet")?;
15 assert_eq!(me.read("profile.wallet.total"), Some(&Value::from(60_f64)));
16
17 me.query(
18 "profile.summary",
19 ["profile.wallet.total", "profile.missing"],
20 )?;
21 assert_eq!(
22 me.read("profile.summary"),
23 Some(&Value::Array(vec![Value::from(60_f64), Value::Null]))
24 );
25
26 me.secret("wallet.hidden", "owner-secret")?;
27 me.postulate("wallet.hidden.note", "private")?;
28 assert_eq!(me.read("wallet.hidden.note"), Some(&Value::from("private")));
29 assert_eq!(me.read_public("wallet.hidden.note"), None);
30
31 me.remove("wallet.expenses")?;
32 assert_eq!(me.read("wallet.expenses"), None);
33
34 println!("operator memories = {}", me.memories().len());
35 Ok(())
36}examples/plural_selectors.rs (line 15)
14fn run() -> Result<(), Box<dyn std::error::Error>> {
15 let mut me = Kernel::new();
16
17 me.postulate("apps.demo.notes[alpha].title", "Alpha")?;
18 me.postulate("apps.demo.notes[beta].title", "Beta")?;
19 me.postulate("apps.demo.notes[beta].tags.primary", "work")?;
20
21 assert_eq!(
22 me.children("apps.demo.notes[]")?,
23 vec!["alpha".to_string(), "beta".to_string()]
24 );
25
26 assert_eq!(
27 me.read_public_subtree("apps.demo.notes[]")?,
28 Some(object([
29 ("alpha", object([("title", Value::from("Alpha"))])),
30 (
31 "beta",
32 object([
33 ("tags", object([("primary", Value::from("work"))])),
34 ("title", Value::from("Beta")),
35 ]),
36 ),
37 ]))
38 );
39
40 let parsed = ParsedPath::parse("apps.demo.notes[priority >= 2]")?;
41 assert_eq!(
42 parsed.normalized(),
43 vec![
44 "apps".to_string(),
45 "demo".to_string(),
46 "notes".to_string(),
47 "priority >= 2".to_string(),
48 ]
49 );
50
51 println!("notes[] members = {:?}", me.children("apps.demo.notes[]")?);
52 Ok(())
53}pub fn with_seed(seed: impl Into<String>) -> Self
Sourcepub fn with_compound_seed(who: &str, secret: &str) -> Self
pub fn with_compound_seed(who: &str, secret: &str) -> Self
Examples found in repository?
examples/proof.rs (line 4)
3fn run() -> Result<(), Box<dyn std::error::Error>> {
4 let me = Kernel::with_compound_seed("jabellae", "correct horse battery staple");
5
6 let proof = me.prove_with_timestamp(
7 ProofInput {
8 root_namespace: "https://local.netget/".to_string(),
9 challenge: Some("{\"method\":\"POST\",\"path\":\"/apps/demo\"}".to_string()),
10 },
11 1_776_000_000_000,
12 )?;
13
14 assert_eq!(proof.expression, "jabellae");
15 assert_eq!(proof.namespace, "jabellae.local.netget");
16 assert_eq!(proof.root_namespace, "local.netget");
17 assert!(verify_ed25519_signature(
18 &proof.public_key,
19 &proof.message,
20 &proof.signature
21 ));
22 assert!(!verify_ed25519_signature(
23 &proof.public_key,
24 &proof.message.replace("POST", "GET"),
25 &proof.signature
26 ));
27
28 println!("identity_hash = {}", proof.identity_hash);
29 Ok(())
30}Sourcepub fn memories(&self) -> &[Memory]
pub fn memories(&self) -> &[Memory]
Examples found in repository?
examples/operators.rs (line 34)
3fn run() -> Result<(), Box<dyn std::error::Error>> {
4 let mut me = Kernel::new();
5
6 me.claim_identity("Jabellae")?;
7 assert_eq!(me.active_identity(), Some("jabellae"));
8
9 me.postulate("wallet.income", 100_u64)?;
10 me.postulate("wallet.expenses", 40_u64)?;
11 me.derive("wallet", "total", "income - expenses")?;
12 assert_eq!(me.read("wallet.total"), Some(&Value::from(60_f64)));
13
14 me.pointer("profile.wallet", "wallet")?;
15 assert_eq!(me.read("profile.wallet.total"), Some(&Value::from(60_f64)));
16
17 me.query(
18 "profile.summary",
19 ["profile.wallet.total", "profile.missing"],
20 )?;
21 assert_eq!(
22 me.read("profile.summary"),
23 Some(&Value::Array(vec![Value::from(60_f64), Value::Null]))
24 );
25
26 me.secret("wallet.hidden", "owner-secret")?;
27 me.postulate("wallet.hidden.note", "private")?;
28 assert_eq!(me.read("wallet.hidden.note"), Some(&Value::from("private")));
29 assert_eq!(me.read_public("wallet.hidden.note"), None);
30
31 me.remove("wallet.expenses")?;
32 assert_eq!(me.read("wallet.expenses"), None);
33
34 println!("operator memories = {}", me.memories().len());
35 Ok(())
36}pub fn set_seed(&mut self, seed: impl Into<String>) -> &mut Self
pub fn reseed_identity(&mut self, who: &str, secret: &str) -> &mut Self
pub fn identity_hash(&self) -> Option<&str>
pub fn active_expression(&self) -> Option<&str>
pub fn set_active_expression( &mut self, expression: impl Into<Option<String>>, ) -> &mut Self
Sourcepub fn prove_with_timestamp(
&self,
input: ProofInput,
timestamp: u64,
) -> Result<ProofResult, ProofError>
pub fn prove_with_timestamp( &self, input: ProofInput, timestamp: u64, ) -> Result<ProofResult, ProofError>
Examples found in repository?
examples/proof.rs (lines 6-12)
3fn run() -> Result<(), Box<dyn std::error::Error>> {
4 let me = Kernel::with_compound_seed("jabellae", "correct horse battery staple");
5
6 let proof = me.prove_with_timestamp(
7 ProofInput {
8 root_namespace: "https://local.netget/".to_string(),
9 challenge: Some("{\"method\":\"POST\",\"path\":\"/apps/demo\"}".to_string()),
10 },
11 1_776_000_000_000,
12 )?;
13
14 assert_eq!(proof.expression, "jabellae");
15 assert_eq!(proof.namespace, "jabellae.local.netget");
16 assert_eq!(proof.root_namespace, "local.netget");
17 assert!(verify_ed25519_signature(
18 &proof.public_key,
19 &proof.message,
20 &proof.signature
21 ));
22 assert!(!verify_ed25519_signature(
23 &proof.public_key,
24 &proof.message.replace("POST", "GET"),
25 &proof.signature
26 ));
27
28 println!("identity_hash = {}", proof.identity_hash);
29 Ok(())
30}pub fn inspect(&self) -> InspectResult
pub fn inspect_last(&self, last: usize) -> InspectResult
Sourcepub fn active_identity(&self) -> Option<&str>
pub fn active_identity(&self) -> Option<&str>
Examples found in repository?
examples/operators.rs (line 7)
3fn run() -> Result<(), Box<dyn std::error::Error>> {
4 let mut me = Kernel::new();
5
6 me.claim_identity("Jabellae")?;
7 assert_eq!(me.active_identity(), Some("jabellae"));
8
9 me.postulate("wallet.income", 100_u64)?;
10 me.postulate("wallet.expenses", 40_u64)?;
11 me.derive("wallet", "total", "income - expenses")?;
12 assert_eq!(me.read("wallet.total"), Some(&Value::from(60_f64)));
13
14 me.pointer("profile.wallet", "wallet")?;
15 assert_eq!(me.read("profile.wallet.total"), Some(&Value::from(60_f64)));
16
17 me.query(
18 "profile.summary",
19 ["profile.wallet.total", "profile.missing"],
20 )?;
21 assert_eq!(
22 me.read("profile.summary"),
23 Some(&Value::Array(vec![Value::from(60_f64), Value::Null]))
24 );
25
26 me.secret("wallet.hidden", "owner-secret")?;
27 me.postulate("wallet.hidden.note", "private")?;
28 assert_eq!(me.read("wallet.hidden.note"), Some(&Value::from("private")));
29 assert_eq!(me.read_public("wallet.hidden.note"), None);
30
31 me.remove("wallet.expenses")?;
32 assert_eq!(me.read("wallet.expenses"), None);
33
34 println!("operator memories = {}", me.memories().len());
35 Ok(())
36}pub fn operators(&self) -> &BTreeMap<String, OperatorDefinition>
pub fn events(&self) -> &[KernelEvent]
pub fn event_cursor(&self) -> usize
pub fn events_since(&self, cursor: usize) -> &[KernelEvent]
pub fn drain_events_since(&mut self, cursor: usize) -> Vec<KernelEvent>
pub fn drain_events(&mut self) -> Vec<KernelEvent>
pub fn events_matching( &self, path: impl IntoPath, ) -> Result<Vec<KernelEvent>, KernelError>
pub fn drain_events_matching( &mut self, path: impl IntoPath, ) -> Result<Vec<KernelEvent>, KernelError>
pub fn clear_events(&mut self) -> &mut Self
pub fn operator_kind(&self, operator: &str) -> Option<&str>
pub fn recompute_mode(&self) -> RecomputeMode
pub fn set_recompute_mode(&mut self, mode: RecomputeMode) -> &mut Self
pub fn define_operator( &mut self, operator: &str, kind: &str, ) -> Result<(), KernelError>
pub fn is_secret_scope(&self, path: impl IntoPath) -> bool
pub fn is_noise_scope(&self, path: impl IntoPath) -> bool
pub fn effective_secret( &self, path: impl IntoPath, ) -> Result<String, KernelError>
pub fn secret_material_v3( &self, path: impl IntoPath, mode: SecretMaterialMode, purpose: SecretMaterialPurpose, ) -> Result<[u8; 32], KernelError>
pub fn secret_blob_keys_v3( &self, path: impl IntoPath, mode: SecretMaterialMode, ) -> Result<BlobV3DerivedKeys, KernelError>
pub fn encrypt_secret_value_v3( &self, path: impl IntoPath, value: impl Into<Value>, nonce: [u8; 16], ) -> Result<String, KernelError>
pub fn decrypt_secret_value_v3( &self, path: impl IntoPath, blob: &str, ) -> Result<Option<Value>, KernelError>
Sourcepub fn postulate(
&mut self,
path: impl IntoPath,
value: impl Into<Value>,
) -> Result<&Memory, KernelError>
pub fn postulate( &mut self, path: impl IntoPath, value: impl Into<Value>, ) -> Result<&Memory, KernelError>
Examples found in repository?
examples/quickstart.rs (line 6)
3fn run() -> Result<(), Box<dyn std::error::Error>> {
4 let mut me = Kernel::new();
5
6 me.postulate("profile.name", "Jabellae")?;
7 me.postulate("wallet.income", 100_u64)?;
8 me.postulate("wallet.expenses", 40_u64)?;
9 me.derive("", "wallet.total", "wallet.income - wallet.expenses")?;
10
11 assert_eq!(me.read("wallet.total"), Some(&Value::from(60_u64)));
12 println!("wallet.total = {:?}", me.read("wallet.total"));
13
14 Ok(())
15}More examples
examples/operators.rs (line 9)
3fn run() -> Result<(), Box<dyn std::error::Error>> {
4 let mut me = Kernel::new();
5
6 me.claim_identity("Jabellae")?;
7 assert_eq!(me.active_identity(), Some("jabellae"));
8
9 me.postulate("wallet.income", 100_u64)?;
10 me.postulate("wallet.expenses", 40_u64)?;
11 me.derive("wallet", "total", "income - expenses")?;
12 assert_eq!(me.read("wallet.total"), Some(&Value::from(60_f64)));
13
14 me.pointer("profile.wallet", "wallet")?;
15 assert_eq!(me.read("profile.wallet.total"), Some(&Value::from(60_f64)));
16
17 me.query(
18 "profile.summary",
19 ["profile.wallet.total", "profile.missing"],
20 )?;
21 assert_eq!(
22 me.read("profile.summary"),
23 Some(&Value::Array(vec![Value::from(60_f64), Value::Null]))
24 );
25
26 me.secret("wallet.hidden", "owner-secret")?;
27 me.postulate("wallet.hidden.note", "private")?;
28 assert_eq!(me.read("wallet.hidden.note"), Some(&Value::from("private")));
29 assert_eq!(me.read_public("wallet.hidden.note"), None);
30
31 me.remove("wallet.expenses")?;
32 assert_eq!(me.read("wallet.expenses"), None);
33
34 println!("operator memories = {}", me.memories().len());
35 Ok(())
36}examples/plural_selectors.rs (line 17)
14fn run() -> Result<(), Box<dyn std::error::Error>> {
15 let mut me = Kernel::new();
16
17 me.postulate("apps.demo.notes[alpha].title", "Alpha")?;
18 me.postulate("apps.demo.notes[beta].title", "Beta")?;
19 me.postulate("apps.demo.notes[beta].tags.primary", "work")?;
20
21 assert_eq!(
22 me.children("apps.demo.notes[]")?,
23 vec!["alpha".to_string(), "beta".to_string()]
24 );
25
26 assert_eq!(
27 me.read_public_subtree("apps.demo.notes[]")?,
28 Some(object([
29 ("alpha", object([("title", Value::from("Alpha"))])),
30 (
31 "beta",
32 object([
33 ("tags", object([("primary", Value::from("work"))])),
34 ("title", Value::from("Beta")),
35 ]),
36 ),
37 ]))
38 );
39
40 let parsed = ParsedPath::parse("apps.demo.notes[priority >= 2]")?;
41 assert_eq!(
42 parsed.normalized(),
43 vec![
44 "apps".to_string(),
45 "demo".to_string(),
46 "notes".to_string(),
47 "priority >= 2".to_string(),
48 ]
49 );
50
51 println!("notes[] members = {:?}", me.children("apps.demo.notes[]")?);
52 Ok(())
53}pub fn postulate_with_operator( &mut self, path: impl IntoPath, operator: Option<String>, value: impl Into<Value>, ) -> Result<&Memory, KernelError>
Sourcepub fn remove(&mut self, path: impl IntoPath) -> Result<&Memory, KernelError>
pub fn remove(&mut self, path: impl IntoPath) -> Result<&Memory, KernelError>
Examples found in repository?
examples/operators.rs (line 31)
3fn run() -> Result<(), Box<dyn std::error::Error>> {
4 let mut me = Kernel::new();
5
6 me.claim_identity("Jabellae")?;
7 assert_eq!(me.active_identity(), Some("jabellae"));
8
9 me.postulate("wallet.income", 100_u64)?;
10 me.postulate("wallet.expenses", 40_u64)?;
11 me.derive("wallet", "total", "income - expenses")?;
12 assert_eq!(me.read("wallet.total"), Some(&Value::from(60_f64)));
13
14 me.pointer("profile.wallet", "wallet")?;
15 assert_eq!(me.read("profile.wallet.total"), Some(&Value::from(60_f64)));
16
17 me.query(
18 "profile.summary",
19 ["profile.wallet.total", "profile.missing"],
20 )?;
21 assert_eq!(
22 me.read("profile.summary"),
23 Some(&Value::Array(vec![Value::from(60_f64), Value::Null]))
24 );
25
26 me.secret("wallet.hidden", "owner-secret")?;
27 me.postulate("wallet.hidden.note", "private")?;
28 assert_eq!(me.read("wallet.hidden.note"), Some(&Value::from("private")));
29 assert_eq!(me.read_public("wallet.hidden.note"), None);
30
31 me.remove("wallet.expenses")?;
32 assert_eq!(me.read("wallet.expenses"), None);
33
34 println!("operator memories = {}", me.memories().len());
35 Ok(())
36}Sourcepub fn derive(
&mut self,
scope: impl IntoPath,
name: impl IntoPath,
expression: &str,
) -> Result<&Memory, KernelError>
pub fn derive( &mut self, scope: impl IntoPath, name: impl IntoPath, expression: &str, ) -> Result<&Memory, KernelError>
Examples found in repository?
examples/quickstart.rs (line 9)
3fn run() -> Result<(), Box<dyn std::error::Error>> {
4 let mut me = Kernel::new();
5
6 me.postulate("profile.name", "Jabellae")?;
7 me.postulate("wallet.income", 100_u64)?;
8 me.postulate("wallet.expenses", 40_u64)?;
9 me.derive("", "wallet.total", "wallet.income - wallet.expenses")?;
10
11 assert_eq!(me.read("wallet.total"), Some(&Value::from(60_u64)));
12 println!("wallet.total = {:?}", me.read("wallet.total"));
13
14 Ok(())
15}More examples
examples/operators.rs (line 11)
3fn run() -> Result<(), Box<dyn std::error::Error>> {
4 let mut me = Kernel::new();
5
6 me.claim_identity("Jabellae")?;
7 assert_eq!(me.active_identity(), Some("jabellae"));
8
9 me.postulate("wallet.income", 100_u64)?;
10 me.postulate("wallet.expenses", 40_u64)?;
11 me.derive("wallet", "total", "income - expenses")?;
12 assert_eq!(me.read("wallet.total"), Some(&Value::from(60_f64)));
13
14 me.pointer("profile.wallet", "wallet")?;
15 assert_eq!(me.read("profile.wallet.total"), Some(&Value::from(60_f64)));
16
17 me.query(
18 "profile.summary",
19 ["profile.wallet.total", "profile.missing"],
20 )?;
21 assert_eq!(
22 me.read("profile.summary"),
23 Some(&Value::Array(vec![Value::from(60_f64), Value::Null]))
24 );
25
26 me.secret("wallet.hidden", "owner-secret")?;
27 me.postulate("wallet.hidden.note", "private")?;
28 assert_eq!(me.read("wallet.hidden.note"), Some(&Value::from("private")));
29 assert_eq!(me.read_public("wallet.hidden.note"), None);
30
31 me.remove("wallet.expenses")?;
32 assert_eq!(me.read("wallet.expenses"), None);
33
34 println!("operator memories = {}", me.memories().len());
35 Ok(())
36}pub fn collect<I, P>(&self, paths: I) -> Result<Value, KernelError>where
I: IntoIterator<Item = P>,
P: IntoPath,
Sourcepub fn query<I, P>(
&mut self,
target_path: impl IntoPath,
paths: I,
) -> Result<&Memory, KernelError>where
I: IntoIterator<Item = P>,
P: IntoPath,
pub fn query<I, P>(
&mut self,
target_path: impl IntoPath,
paths: I,
) -> Result<&Memory, KernelError>where
I: IntoIterator<Item = P>,
P: IntoPath,
Examples found in repository?
examples/operators.rs (lines 17-20)
3fn run() -> Result<(), Box<dyn std::error::Error>> {
4 let mut me = Kernel::new();
5
6 me.claim_identity("Jabellae")?;
7 assert_eq!(me.active_identity(), Some("jabellae"));
8
9 me.postulate("wallet.income", 100_u64)?;
10 me.postulate("wallet.expenses", 40_u64)?;
11 me.derive("wallet", "total", "income - expenses")?;
12 assert_eq!(me.read("wallet.total"), Some(&Value::from(60_f64)));
13
14 me.pointer("profile.wallet", "wallet")?;
15 assert_eq!(me.read("profile.wallet.total"), Some(&Value::from(60_f64)));
16
17 me.query(
18 "profile.summary",
19 ["profile.wallet.total", "profile.missing"],
20 )?;
21 assert_eq!(
22 me.read("profile.summary"),
23 Some(&Value::Array(vec![Value::from(60_f64), Value::Null]))
24 );
25
26 me.secret("wallet.hidden", "owner-secret")?;
27 me.postulate("wallet.hidden.note", "private")?;
28 assert_eq!(me.read("wallet.hidden.note"), Some(&Value::from("private")));
29 assert_eq!(me.read_public("wallet.hidden.note"), None);
30
31 me.remove("wallet.expenses")?;
32 assert_eq!(me.read("wallet.expenses"), None);
33
34 println!("operator memories = {}", me.memories().len());
35 Ok(())
36}pub fn noise( &mut self, path: impl IntoPath, noise: &str, ) -> Result<&Memory, KernelError>
Sourcepub fn secret(
&mut self,
path: impl IntoPath,
secret: &str,
) -> Result<&Memory, KernelError>
pub fn secret( &mut self, path: impl IntoPath, secret: &str, ) -> Result<&Memory, KernelError>
Examples found in repository?
examples/operators.rs (line 26)
3fn run() -> Result<(), Box<dyn std::error::Error>> {
4 let mut me = Kernel::new();
5
6 me.claim_identity("Jabellae")?;
7 assert_eq!(me.active_identity(), Some("jabellae"));
8
9 me.postulate("wallet.income", 100_u64)?;
10 me.postulate("wallet.expenses", 40_u64)?;
11 me.derive("wallet", "total", "income - expenses")?;
12 assert_eq!(me.read("wallet.total"), Some(&Value::from(60_f64)));
13
14 me.pointer("profile.wallet", "wallet")?;
15 assert_eq!(me.read("profile.wallet.total"), Some(&Value::from(60_f64)));
16
17 me.query(
18 "profile.summary",
19 ["profile.wallet.total", "profile.missing"],
20 )?;
21 assert_eq!(
22 me.read("profile.summary"),
23 Some(&Value::Array(vec![Value::from(60_f64), Value::Null]))
24 );
25
26 me.secret("wallet.hidden", "owner-secret")?;
27 me.postulate("wallet.hidden.note", "private")?;
28 assert_eq!(me.read("wallet.hidden.note"), Some(&Value::from("private")));
29 assert_eq!(me.read_public("wallet.hidden.note"), None);
30
31 me.remove("wallet.expenses")?;
32 assert_eq!(me.read("wallet.expenses"), None);
33
34 println!("operator memories = {}", me.memories().len());
35 Ok(())
36}Sourcepub fn pointer(
&mut self,
path: impl IntoPath,
target: impl IntoPath,
) -> Result<&Memory, KernelError>
pub fn pointer( &mut self, path: impl IntoPath, target: impl IntoPath, ) -> Result<&Memory, KernelError>
Examples found in repository?
examples/operators.rs (line 14)
3fn run() -> Result<(), Box<dyn std::error::Error>> {
4 let mut me = Kernel::new();
5
6 me.claim_identity("Jabellae")?;
7 assert_eq!(me.active_identity(), Some("jabellae"));
8
9 me.postulate("wallet.income", 100_u64)?;
10 me.postulate("wallet.expenses", 40_u64)?;
11 me.derive("wallet", "total", "income - expenses")?;
12 assert_eq!(me.read("wallet.total"), Some(&Value::from(60_f64)));
13
14 me.pointer("profile.wallet", "wallet")?;
15 assert_eq!(me.read("profile.wallet.total"), Some(&Value::from(60_f64)));
16
17 me.query(
18 "profile.summary",
19 ["profile.wallet.total", "profile.missing"],
20 )?;
21 assert_eq!(
22 me.read("profile.summary"),
23 Some(&Value::Array(vec![Value::from(60_f64), Value::Null]))
24 );
25
26 me.secret("wallet.hidden", "owner-secret")?;
27 me.postulate("wallet.hidden.note", "private")?;
28 assert_eq!(me.read("wallet.hidden.note"), Some(&Value::from("private")));
29 assert_eq!(me.read_public("wallet.hidden.note"), None);
30
31 me.remove("wallet.expenses")?;
32 assert_eq!(me.read("wallet.expenses"), None);
33
34 println!("operator memories = {}", me.memories().len());
35 Ok(())
36}Sourcepub fn claim_identity(&mut self, id: &str) -> Result<&Memory, KernelError>
pub fn claim_identity(&mut self, id: &str) -> Result<&Memory, KernelError>
Examples found in repository?
examples/operators.rs (line 6)
3fn run() -> Result<(), Box<dyn std::error::Error>> {
4 let mut me = Kernel::new();
5
6 me.claim_identity("Jabellae")?;
7 assert_eq!(me.active_identity(), Some("jabellae"));
8
9 me.postulate("wallet.income", 100_u64)?;
10 me.postulate("wallet.expenses", 40_u64)?;
11 me.derive("wallet", "total", "income - expenses")?;
12 assert_eq!(me.read("wallet.total"), Some(&Value::from(60_f64)));
13
14 me.pointer("profile.wallet", "wallet")?;
15 assert_eq!(me.read("profile.wallet.total"), Some(&Value::from(60_f64)));
16
17 me.query(
18 "profile.summary",
19 ["profile.wallet.total", "profile.missing"],
20 )?;
21 assert_eq!(
22 me.read("profile.summary"),
23 Some(&Value::Array(vec![Value::from(60_f64), Value::Null]))
24 );
25
26 me.secret("wallet.hidden", "owner-secret")?;
27 me.postulate("wallet.hidden.note", "private")?;
28 assert_eq!(me.read("wallet.hidden.note"), Some(&Value::from("private")));
29 assert_eq!(me.read_public("wallet.hidden.note"), None);
30
31 me.remove("wallet.expenses")?;
32 assert_eq!(me.read("wallet.expenses"), None);
33
34 println!("operator memories = {}", me.memories().len());
35 Ok(())
36}pub fn identity( &mut self, path: impl IntoPath, id: &str, ) -> Result<&Memory, KernelError>
Sourcepub fn read(&self, path: impl IntoPath) -> Option<&Value>
pub fn read(&self, path: impl IntoPath) -> Option<&Value>
Examples found in repository?
examples/quickstart.rs (line 11)
3fn run() -> Result<(), Box<dyn std::error::Error>> {
4 let mut me = Kernel::new();
5
6 me.postulate("profile.name", "Jabellae")?;
7 me.postulate("wallet.income", 100_u64)?;
8 me.postulate("wallet.expenses", 40_u64)?;
9 me.derive("", "wallet.total", "wallet.income - wallet.expenses")?;
10
11 assert_eq!(me.read("wallet.total"), Some(&Value::from(60_u64)));
12 println!("wallet.total = {:?}", me.read("wallet.total"));
13
14 Ok(())
15}More examples
examples/operators.rs (line 12)
3fn run() -> Result<(), Box<dyn std::error::Error>> {
4 let mut me = Kernel::new();
5
6 me.claim_identity("Jabellae")?;
7 assert_eq!(me.active_identity(), Some("jabellae"));
8
9 me.postulate("wallet.income", 100_u64)?;
10 me.postulate("wallet.expenses", 40_u64)?;
11 me.derive("wallet", "total", "income - expenses")?;
12 assert_eq!(me.read("wallet.total"), Some(&Value::from(60_f64)));
13
14 me.pointer("profile.wallet", "wallet")?;
15 assert_eq!(me.read("profile.wallet.total"), Some(&Value::from(60_f64)));
16
17 me.query(
18 "profile.summary",
19 ["profile.wallet.total", "profile.missing"],
20 )?;
21 assert_eq!(
22 me.read("profile.summary"),
23 Some(&Value::Array(vec![Value::from(60_f64), Value::Null]))
24 );
25
26 me.secret("wallet.hidden", "owner-secret")?;
27 me.postulate("wallet.hidden.note", "private")?;
28 assert_eq!(me.read("wallet.hidden.note"), Some(&Value::from("private")));
29 assert_eq!(me.read_public("wallet.hidden.note"), None);
30
31 me.remove("wallet.expenses")?;
32 assert_eq!(me.read("wallet.expenses"), None);
33
34 println!("operator memories = {}", me.memories().len());
35 Ok(())
36}pub fn read_fresh(&mut self, path: impl IntoPath) -> Option<Value>
Sourcepub fn read_public(&self, path: impl IntoPath) -> Option<&Value>
pub fn read_public(&self, path: impl IntoPath) -> Option<&Value>
Examples found in repository?
examples/operators.rs (line 29)
3fn run() -> Result<(), Box<dyn std::error::Error>> {
4 let mut me = Kernel::new();
5
6 me.claim_identity("Jabellae")?;
7 assert_eq!(me.active_identity(), Some("jabellae"));
8
9 me.postulate("wallet.income", 100_u64)?;
10 me.postulate("wallet.expenses", 40_u64)?;
11 me.derive("wallet", "total", "income - expenses")?;
12 assert_eq!(me.read("wallet.total"), Some(&Value::from(60_f64)));
13
14 me.pointer("profile.wallet", "wallet")?;
15 assert_eq!(me.read("profile.wallet.total"), Some(&Value::from(60_f64)));
16
17 me.query(
18 "profile.summary",
19 ["profile.wallet.total", "profile.missing"],
20 )?;
21 assert_eq!(
22 me.read("profile.summary"),
23 Some(&Value::Array(vec![Value::from(60_f64), Value::Null]))
24 );
25
26 me.secret("wallet.hidden", "owner-secret")?;
27 me.postulate("wallet.hidden.note", "private")?;
28 assert_eq!(me.read("wallet.hidden.note"), Some(&Value::from("private")));
29 assert_eq!(me.read_public("wallet.hidden.note"), None);
30
31 me.remove("wallet.expenses")?;
32 assert_eq!(me.read("wallet.expenses"), None);
33
34 println!("operator memories = {}", me.memories().len());
35 Ok(())
36}Sourcepub fn children(
&self,
prefix: impl IntoPath,
) -> Result<Vec<String>, KernelError>
pub fn children( &self, prefix: impl IntoPath, ) -> Result<Vec<String>, KernelError>
Examples found in repository?
examples/plural_selectors.rs (line 22)
14fn run() -> Result<(), Box<dyn std::error::Error>> {
15 let mut me = Kernel::new();
16
17 me.postulate("apps.demo.notes[alpha].title", "Alpha")?;
18 me.postulate("apps.demo.notes[beta].title", "Beta")?;
19 me.postulate("apps.demo.notes[beta].tags.primary", "work")?;
20
21 assert_eq!(
22 me.children("apps.demo.notes[]")?,
23 vec!["alpha".to_string(), "beta".to_string()]
24 );
25
26 assert_eq!(
27 me.read_public_subtree("apps.demo.notes[]")?,
28 Some(object([
29 ("alpha", object([("title", Value::from("Alpha"))])),
30 (
31 "beta",
32 object([
33 ("tags", object([("primary", Value::from("work"))])),
34 ("title", Value::from("Beta")),
35 ]),
36 ),
37 ]))
38 );
39
40 let parsed = ParsedPath::parse("apps.demo.notes[priority >= 2]")?;
41 assert_eq!(
42 parsed.normalized(),
43 vec![
44 "apps".to_string(),
45 "demo".to_string(),
46 "notes".to_string(),
47 "priority >= 2".to_string(),
48 ]
49 );
50
51 println!("notes[] members = {:?}", me.children("apps.demo.notes[]")?);
52 Ok(())
53}Sourcepub fn read_public_subtree(
&self,
prefix: impl IntoPath,
) -> Result<Option<Value>, KernelError>
pub fn read_public_subtree( &self, prefix: impl IntoPath, ) -> Result<Option<Value>, KernelError>
Examples found in repository?
examples/plural_selectors.rs (line 27)
14fn run() -> Result<(), Box<dyn std::error::Error>> {
15 let mut me = Kernel::new();
16
17 me.postulate("apps.demo.notes[alpha].title", "Alpha")?;
18 me.postulate("apps.demo.notes[beta].title", "Beta")?;
19 me.postulate("apps.demo.notes[beta].tags.primary", "work")?;
20
21 assert_eq!(
22 me.children("apps.demo.notes[]")?,
23 vec!["alpha".to_string(), "beta".to_string()]
24 );
25
26 assert_eq!(
27 me.read_public_subtree("apps.demo.notes[]")?,
28 Some(object([
29 ("alpha", object([("title", Value::from("Alpha"))])),
30 (
31 "beta",
32 object([
33 ("tags", object([("primary", Value::from("work"))])),
34 ("title", Value::from("Beta")),
35 ]),
36 ),
37 ]))
38 );
39
40 let parsed = ParsedPath::parse("apps.demo.notes[priority >= 2]")?;
41 assert_eq!(
42 parsed.normalized(),
43 vec![
44 "apps".to_string(),
45 "demo".to_string(),
46 "notes".to_string(),
47 "priority >= 2".to_string(),
48 ]
49 );
50
51 println!("notes[] members = {:?}", me.children("apps.demo.notes[]")?);
52 Ok(())
53}pub fn explain_fresh( &mut self, path: impl IntoPath, ) -> Result<ExplainResult, KernelError>
pub fn explain(&self, path: impl IntoPath) -> Result<ExplainResult, KernelError>
pub fn export_snapshot(&self) -> Snapshot
pub fn hydrate(snapshot: Snapshot) -> Result<Self, KernelError>
pub fn learn(&mut self, memory: &Memory) -> Result<&Memory, KernelError>
pub fn replay_memories<I>(&mut self, memories: I) -> Result<(), KernelError>where
I: IntoIterator<Item = Memory>,
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Kernel
impl RefUnwindSafe for Kernel
impl Send for Kernel
impl Sync for Kernel
impl Unpin for Kernel
impl UnsafeUnpin for Kernel
impl UnwindSafe for Kernel
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more