Sign in

    jaredzhou/mooncedar/ast does not have a README file

    ValidationError

    pub(all) suberror ValidationError {
    ValidationError(String, String)
    } derive(
    Debug
    )

    Validation error with a message and the offending policy id.

    Annotation

    pub(all) struct Annotation {
    key : String
    value : String
    } derive(Eq,
    Debug
    )

    Annotation — key-value metadata attached to a policy. Has no effect on policy evaluation.

    BinaryOp

    pub(all) enum BinaryOp {
    Eq
    Ne
    Less
    LessEq
    Gt
    Ge
    Add
    Sub
    Mul
    In_
    Contains
    ContainsAll
    ContainsAny
    } derive(Eq,
    Debug
    )

    Built-in binary operators.

    Condition

    pub(all) struct Condition {
    kind : ConditionKind
    body : Expr
    } derive(Eq,
    Debug
    )

    ConditionKind

    pub(all) enum ConditionKind {
    When
    Unless
    } derive(Eq,
    Debug
    )

    Entity

    pub(all) struct Entity {
    uid : EntityUID
    attrs : Map[String, Value]
    tags : Map[String, Value]
    parents : Array[EntityUID]
    } derive(Eq,
    Debug
    )

    An entity as provided by the application. Contains attributes (schema-defined), tags (free-form), and parent relationships for hierarchy traversal (in operator).
    impl ToJson for Entity
    impl FromJson for Entity

    EntityType

    An entity type name, e.g. User, Photo.

    EntityUID

    pub(all) struct EntityUID {
    type_ : String
    id : String
    } derive(Eq, Hash,
    Debug
    )

    A unique entity identifier, e.g. User::"alice".
    impl ToJson for EntityUID

    Expr

    pub(all) enum Expr {
    Lit(Literal)
    Var(VarKind)
    If(Expr, Expr, Expr)
    And(Expr, Expr)
    Or(Expr, Expr)
    UnaryApp(UnaryOp, Expr)
    BinaryApp(BinaryOp, Expr, Expr)
    GetAttr(Expr, String)
    HasAttr(Expr, String)
    GetTag(Expr, Expr)
    HasTag(Expr, Expr)
    Like(Expr, Pattern)
    Is(Expr, EntityType)
    Set(Array[Expr])
    Record(Array[(String, Expr)])
    ExtensionApp(Name, Array[Expr])
    Slot(String)
    Unknown(String, Type?)
    } derive(Eq,
    Debug
    )

    The complete expression AST for Cedar. Covers every node type from the Cedar language specification.

    Expr::access

    fn Expr::access(self : Expr, attr : String) -> Expr

    self.attr

    Expr::add

    fn Expr::add(self : Expr, rhs : Expr) -> Expr

    self + rhs

    Expr::and_

    fn Expr::and_(self : Expr, rhs : Expr) -> Expr

    self && rhs (keyword: and)

    Expr::contains

    fn Expr::contains(self : Expr, rhs : Expr) -> Expr

    self.contains(rhs)

    Expr::contains_all

    fn Expr::contains_all(self : Expr, rhs : Expr) -> Expr

    self.contains_all(rhs)

    Expr::contains_any

    fn Expr::contains_any(self : Expr, rhs : Expr) -> Expr

    self.contains_any(rhs)

    Expr::eq

    fn Expr::eq(self : Expr, rhs : Expr) -> Expr

    self == rhs

    Expr::ge

    fn Expr::ge(self : Expr, rhs : Expr) -> Expr

    self >= rhs

    Expr::get_tag

    fn Expr::get_tag(self : Expr, tag : Expr) -> Expr

    self.get_tag(tag)

    Expr::gt

    fn Expr::gt(self : Expr, rhs : Expr) -> Expr

    self > rhs

    Expr::has

    fn Expr::has(self : Expr, attr : String) -> Expr

    self has attr

    Expr::has_tag

    fn Expr::has_tag(self : Expr, tag : Expr) -> Expr

    self.has_tag(tag)

    Expr::in_

    fn Expr::in_(self : Expr, rhs : Expr) -> Expr

    self in rhs (keyword: in)

    Expr::is_

    fn Expr::is_(self : Expr, ty : EntityType) -> Expr

    self is EntityType (keyword: is)

    Expr::is_in

    fn Expr::is_in(self : Expr, ty : EntityType, entity : Expr) -> Expr

    self is ty AND self in entity — desugared to and_ + is_ + in_

    Expr::le

    fn Expr::le(self : Expr, rhs : Expr) -> Expr

    self <= rhs

    Expr::like

    fn Expr::like(self : Expr, pattern : Pattern) -> Expr

    self like pattern

    Expr::lt

    fn Expr::lt(self : Expr, rhs : Expr) -> Expr

    self < rhs

    Expr::mul

    fn Expr::mul(self : Expr, rhs : Expr) -> Expr

    self * rhs

    Expr::ne

    fn Expr::ne(self : Expr, rhs : Expr) -> Expr

    self != rhs

    Expr::or_

    fn Expr::or_(self : Expr, rhs : Expr) -> Expr

    self || rhs (keyword: or)

    Expr::sub

    fn Expr::sub(self : Expr, rhs : Expr) -> Expr

    self - rhs

    Literal

    pub(all) enum Literal {
    Bool(Bool)
    Long(Int64)
    String(String)
    EntityUID(EntityUID)
    } derive(Eq,
    Debug
    )

    A literal value that can appear directly in Cedar source text. Set and Record are NOT literals — they are compound expressions.

    Name

    pub(all) struct Name {
    ns : Array[String]
    name : String
    } derive(Eq, ToJson,
    Debug
    ,
    FromJson
    )

    A namespaced path for extension functions, e.g. ip, decimal.

    PartialValue

    pub(all) enum PartialValue {
    Value(Value)
    Residual(Expr)
    } derive(Eq,
    Debug
    )

    Result of evaluating an expression — either a concrete value or a residual expression that could not be reduced (partial evaluation).

    Also used as the value type in Entity attrs/tags, because entity attributes and tags can be unknown during partial evaluation (source #5 of Unknown).

    Pattern

    pub(all) struct Pattern {
    elements : Array[PatternElem]
    } derive(Eq,
    Debug
    )

    Pattern for the like operator (IAM-style StringLike). The wildcard * matches any string; \* matches a literal *.

    PatternElem

    pub(all) enum PatternElem {
    Char(Char)
    Wildcard
    } derive(Eq,
    Debug
    )

    Policy

    pub(all) struct Policy {
    id : String
    effect : PolicyEffect
    annotations : Array[Annotation]
    principal : ScopeConstraint
    action : ScopeConstraint
    resource : ScopeConstraint
    conditions : Array[Condition]
    } derive(Eq,
    Debug
    )

    A complete Cedar policy.

    Policy::action_eq

    fn Policy::action_eq(self : Policy, type_ : String, id : String) -> Policy

    Policy::action_in

    fn Policy::action_in(self : Policy, type_ : String, id : String) -> Policy

    Policy::action_in_set

    fn Policy::action_in_set(self : Policy, entities : Array[(String, String)]) -> Policy

    Policy::annotate

    fn Policy::annotate(self : Policy, key : String, value : String) -> Policy

    Policy::forbid

    fn Policy::forbid(self : Policy) -> Policy

    Policy::permit

    fn Policy::permit(self : Policy) -> Policy

    Policy::principal_eq

    fn Policy::principal_eq(self : Policy, type_ : String, id : String) -> Policy

    Policy::principal_in

    fn Policy::principal_in(self : Policy, type_ : String, id : String) -> Policy

    Policy::principal_is

    fn Policy::principal_is(self : Policy, type_ : String) -> Policy

    Policy::principal_is_in

    fn Policy::principal_is_in(self : Policy, ty : String, parent_ty : String, parent_id : String) -> Policy

    Policy::resource_eq

    fn Policy::resource_eq(self : Policy, type_ : String, id : String) -> Policy

    Policy::resource_in

    fn Policy::resource_in(self : Policy, type_ : String, id : String) -> Policy

    Policy::resource_is

    fn Policy::resource_is(self : Policy, type_ : String) -> Policy

    Policy::resource_is_in

    fn Policy::resource_is_in(self : Policy, ty : String, parent_ty : String, parent_id : String) -> Policy

    Policy::unless

    fn Policy::unless(self : Policy, body : Expr) -> Policy

    Policy::when_

    fn Policy::when_(self : Policy, body : Expr) -> Policy

    Policy::with_id

    fn Policy::with_id(self : Policy, id : String) -> Policy

    PolicyEffect

    pub(all) enum PolicyEffect {
    Permit
    Forbid
    } derive(Eq,
    Debug
    )

    Position

    pub(all) struct Position {
    filename : String
    offset : Int
    line : Int
    column : Int
    } derive(Eq,
    Debug
    )

    Source position for diagnostics / error messages.

    ScopeConstraint

    pub(all) enum ScopeConstraint {
    All
    Eq(EntityUID)
    In(EntityUID)
    InSet(Array[EntityUID])
    Is(EntityType)
    IsIn(EntityType, EntityUID)
    } derive(Eq,
    Debug
    )

    Scope constraint for principal, action, or resource in a policy.

    Not every variant is valid for every PARC position:
    • Principal: All | Eq | In | Is | IsIn
    • Action: All | Eq | In | InSet
    • Resource: All | Eq | In | Is | IsIn

    Type

    pub(all) enum Type {
    Bool
    Long
    String
    Set
    Record
    Entity(EntityType)
    Extension(Name)
    } derive(Eq,
    Debug
    )

    The runtime type of a Cedar value. Two entity types are equal iff they have the same Name. Two extension types are equal iff they have the same Name.

    UnaryOp

    pub(all) enum UnaryOp {
    Not
    Neg
    IsEmpty
    } derive(Eq,
    Debug
    )

    Built-in unary operators.

    Value

    pub(all) enum Value {
    Bool(Bool)
    Long(Int64)
    String(String)
    EntityUID(EntityUID)
    Set(Array[Value])
    Record(Map[String, Value])
    Extension(Name, String)
    } derive(Eq, ToJson,
    Debug
    ,
    FromJson
    )

    All values that can be the dynamic result of evaluating an Expr. Includes extension values (ip, decimal, datetime, duration, etc.) as opaque Extension(Name, String) entries for MVP.

    VarKind

    pub(all) enum VarKind {
    Principal
    Action
    Resource
    Context
    } derive(Eq,
    Debug
    )

    The four PARC variables that Cedar expressions can reference.

    action

    fn action() -> Expr

    bool

    fn bool(b : Bool) -> Expr

    context

    fn context() -> Expr

    default

    fn default() -> Policy

    Return a zero-valued Policy with Permit effect, All scopes, empty arrays.

    entity_type

    fn entity_type(name : String) -> EntityType

    Construct an EntityType newtype in builder contexts.

    entity_uid

    fn entity_uid(type_ : String, id : String) -> EntityUID

    Construct an EntityUID in builder contexts.

    euid

    fn euid(type_ : String, id : String) -> Expr

    ext_call

    fn ext_call(name : Name, args : Array[Expr]) -> Expr

    if_

    fn if_(cond : Expr, t : Expr, e : Expr) -> Expr

    is_empty

    fn is_empty(e : Expr) -> Expr

    long

    fn long(l : Int64) -> Expr

    neg

    fn neg(e : Expr) -> Expr

    not_

    fn not_(e : Expr) -> Expr

    principal

    fn principal() -> Expr

    record

    fn record(pairs : Array[(String, Expr)]) -> Expr

    resource

    fn resource() -> Expr

    set

    fn set(elements : Array[Expr]) -> Expr

    str

    fn str(s : String) -> Expr

    unknown

    fn unknown(name : String, typ? : Type) -> Expr

    Convenience constructor for Unknown. Call unknown("x") for an untyped unknown, or unknown("x", typ=EntityType("User")) for a typed one.

    validate_policies

    fn validate_policies(policies : Array[Policy]) -> Unit raise ValidationError

    Validate all policies in a policy set. Raises on the first invalid policy found.

    validate_policy

    fn validate_policy(policy : Policy) -> Unit raise ValidationError

    Validate a single policy's scope constraints.

    PositionValid variantsInvalid
    PrincipalAll, Eq, In, Is, IsInInSet
    ActionAll, Eq, In, InSetIs, IsIn
    ResourceAll, Eq, In, Is, IsInInSet