Skip to content

Commit

Permalink
Working on policy DSL
Browse files Browse the repository at this point in the history
  • Loading branch information
expede committed Feb 27, 2024
1 parent 8522b55 commit 5666899
Show file tree
Hide file tree
Showing 5 changed files with 445 additions and 0 deletions.
1 change: 1 addition & 0 deletions src/delegation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
//! - [`store`] is an interface for caching [`Delegation`]s.
pub mod condition;
pub mod policy;
pub mod store;

mod agent;
Expand Down
1 change: 1 addition & 0 deletions src/delegation/condition.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ pub use traits::Condition;
use crate::ability::arguments;
use libipld_core::{error::SerdeError, ipld::Ipld, serde as ipld_serde};
use serde_derive::{Deserialize, Serialize};
use std::collections::BTreeMap;

/// The union of the common [`Condition`]s that ship directly with this library.
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
Expand Down
2 changes: 2 additions & 0 deletions src/delegation/policy.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
pub mod frontend;
pub mod ir;
62 changes: 62 additions & 0 deletions src/delegation/policy/frontend.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
use super::ir;
use libipld_core::ipld::Ipld;
use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum Term {
// Leaves
Args, // $
Literal(Ipld),
Variable(Variable),

Selector(Selector),

// Connectives
Not(Box<Term>),
And(Vec<Term>),
Or(Vec<Term>),

// Comparison
Equal(Value, Value),
GreaterThan(Value, Value),
GreaterOrEqual(Value, Value),
LessThan(Value, Value),
LessOrEqual(Value, Value),

// String Matcher
Glob(Value, String),

// Existential Quantification
Exists(Variable, Collection), // ∃x ∈ xs
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Variable(String); // ?x

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum Collection {
Array(Vec<Ipld>),
Map(BTreeMap<String, Ipld>),
Variable(Variable),
Selector(Selector),
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct Selector(Vec<Index>); // .foo.bar[].baz

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum Index {
This,
// RecDesend, // ..
FlattenAll, // .[]
Index(usize), // .[2]
Key(String), // .key
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum Value {
Literal(Ipld),
Variable(Variable),
ImplicitBind(Selector),
}
Loading

0 comments on commit 5666899

Please sign in to comment.