cedar_policy

Struct Entities

Source
pub struct Entities(/* private fields */);
Expand description

Represents an entity hierarchy, and allows looking up Entity objects by Uid.

Implementations§

Source§

impl Entities

Source

pub fn empty() -> Self

Create a fresh Entities with no entities

let entities = Entities::empty();
Source

pub fn get(&self, uid: &EntityUid) -> Option<&Entity>

Get the Entity with the given Uid, if any

Source

pub fn partial(self) -> Self

Available on crate feature partial-eval only.

Transform the store into a partial store, where attempting to dereference a non-existent EntityUID results in a residual instead of an error.

This feature is experimental. For more information see https://github.com/cedar-policy/rfcs/blob/main/README.md#experimental-features
Source

pub fn iter(&self) -> impl Iterator<Item = &Entity>

Iterate over the Entity’s in the Entities

Source

pub fn from_entities( entities: impl IntoIterator<Item = Entity>, schema: Option<&Schema>, ) -> Result<Self, EntitiesError>

Create an Entities object with the given entities.

schema represents a source of Action entities, which will be added to the entities provided. (If any Action entities are present in the provided entities, and a schema is also provided, each Action entity in the provided entities must exactly match its definition in the schema or an error is returned.)

If a schema is present, this function will also ensure that the produced entities fully conform to the schema – for instance, it will error if attributes have the wrong types (e.g., string instead of integer), or if required attributes are missing or superfluous attributes are provided.

§Errors
Source

pub fn add_entities( self, entities: impl IntoIterator<Item = Entity>, schema: Option<&Schema>, ) -> Result<Self, EntitiesError>

Add all of the Entitys in the collection to this Entities structure, re-computing the transitive closure.

If a schema is provided, this method will ensure that the added entities fully conform to the schema – for instance, it will error if attributes have the wrong types (e.g., string instead of integer), or if required attributes are missing or superfluous attributes are provided. (This method will not add action entities from the schema.)

Re-computing the transitive closure can be expensive, so it is advised to not call this method in a loop.

§Errors
Source

pub fn add_entities_from_json_str( self, json: &str, schema: Option<&Schema>, ) -> Result<Self, EntitiesError>

Parse an entities JSON file (in &str form) and add them into this Entities structure, re-computing the transitive closure

If a schema is provided, this will inform the parsing: for instance, it will allow __entity and __extn escapes to be implicit. This method will also ensure that the added entities fully conform to the schema – for instance, it will error if attributes have the wrong types (e.g., string instead of integer), or if required attributes are missing or superfluous attributes are provided. (This method will not add action entities from the schema.)

Re-computing the transitive closure can be expensive, so it is advised to not call this method in a loop.

§Errors
Source

pub fn add_entities_from_json_value( self, json: Value, schema: Option<&Schema>, ) -> Result<Self, EntitiesError>

Parse an entities JSON file (in serde_json::Value form) and add them into this Entities structure, re-computing the transitive closure

If a schema is provided, this will inform the parsing: for instance, it will allow __entity and __extn escapes to be implicit. This method will also ensure that the added entities fully conform to the schema – for instance, it will error if attributes have the wrong types (e.g., string instead of integer), or if required attributes are missing or superfluous attributes are provided. (This method will not add action entities from the schema.)

Re-computing the transitive closure can be expensive, so it is advised to not call this method in a loop.

§Errors
Source

pub fn add_entities_from_json_file( self, json: impl Read, schema: Option<&Schema>, ) -> Result<Self, EntitiesError>

Parse an entities JSON file (in std::io::Read form) and add them into this Entities structure, re-computing the transitive closure

If a schema is provided, this will inform the parsing: for instance, it will allow __entity and __extn escapes to be implicit. This method will also ensure that the added entities fully conform to the schema – for instance, it will error if attributes have the wrong types (e.g., string instead of integer), or if required attributes are missing or superfluous attributes are provided. (This method will not add action entities from the schema.)

Re-computing the transitive closure can be expensive, so it is advised to not call this method in a loop.

§Errors
Source

pub fn from_json_str( json: &str, schema: Option<&Schema>, ) -> Result<Self, EntitiesError>

Parse an entities JSON file (in &str form) into an Entities object

schema represents a source of Action entities, which will be added to the entities parsed from JSON. (If any Action entities are present in the JSON, and a schema is also provided, each Action entity in the JSON must exactly match its definition in the schema or an error is returned.)

If a schema is present, this will also inform the parsing: for instance, it will allow __entity and __extn escapes to be implicit.

Finally, if a schema is present, this function will ensure that the produced entities fully conform to the schema – for instance, it will error if attributes have the wrong types (e.g., string instead of integer), or if required attributes are missing or superfluous attributes are provided.

§Errors
let data =r#"
[
{
  "uid": {"type":"User","id":"alice"},
  "attrs": {
    "age":19,
    "ip_addr":{"__extn":{"fn":"ip", "arg":"10.0.1.101"}}
  },
  "parents": [{"type":"Group","id":"admin"}]
},
{
  "uid": {"type":"Group","id":"admin"},
  "attrs": {},
  "parents": []
}
]
"#;
let entities = Entities::from_json_str(data, None).unwrap();
Source

pub fn from_json_value( json: Value, schema: Option<&Schema>, ) -> Result<Self, EntitiesError>

Parse an entities JSON file (in serde_json::Value form) into an Entities object

schema represents a source of Action entities, which will be added to the entities parsed from JSON. (If any Action entities are present in the JSON, and a schema is also provided, each Action entity in the JSON must exactly match its definition in the schema or an error is returned.)

If a schema is present, this will also inform the parsing: for instance, it will allow __entity and __extn escapes to be implicit.

Finally, if a schema is present, this function will ensure that the produced entities fully conform to the schema – for instance, it will error if attributes have the wrong types (e.g., string instead of integer), or if required attributes are missing or superfluous attributes are provided.

§Errors
let data =serde_json::json!(
[
{
  "uid": {"type":"User","id":"alice"},
  "attrs": {
    "age":19,
    "ip_addr":{"__extn":{"fn":"ip", "arg":"10.0.1.101"}}
  },
  "parents": [{"type":"Group","id":"admin"}]
},
{
  "uid": {"type":"Groupd","id":"admin"},
  "attrs": {},
  "parents": []
}
]
);
let entities = Entities::from_json_value(data, None).unwrap();
Source

pub fn from_json_file( json: impl Read, schema: Option<&Schema>, ) -> Result<Self, EntitiesError>

Parse an entities JSON file (in std::io::Read form) into an Entities object

schema represents a source of Action entities, which will be added to the entities parsed from JSON. (If any Action entities are present in the JSON, and a schema is also provided, each Action entity in the JSON must exactly match its definition in the schema or an error is returned.)

If a schema is present, this will also inform the parsing: for instance, it will allow __entity and __extn escapes to be implicit.

Finally, if a schema is present, this function will ensure that the produced entities fully conform to the schema – for instance, it will error if attributes have the wrong types (e.g., string instead of integer), or if required attributes are missing or superfluous attributes are provided.

§Errors
Source

pub fn is_ancestor_of(&self, a: &EntityUid, b: &EntityUid) -> bool

Is entity a an ancestor of entity b? Same semantics as b in a in the Cedar language

Source

pub fn ancestors<'a>( &'a self, euid: &EntityUid, ) -> Option<impl Iterator<Item = &'a EntityUid>>

Get an iterator over the ancestors of the given Euid. Returns None if the given Euid does not exist.

Source

pub fn write_to_json(&self, f: impl Write) -> Result<(), EntitiesError>

Dump an Entities object into an entities JSON file.

The resulting JSON will be suitable for parsing in via from_json_*, and will be parse-able even with no Schema.

To read an Entities object from an entities JSON file, use from_json_file.

Source

pub fn to_dot_str(&self) -> String

This feature is experimental. For more information see https://github.com/cedar-policy/rfcs/blob/main/README.md#experimental-features
Visualize an `Entities` object in the graphviz `dot` format. Entity visualization is best-effort and not well tested. Feel free to submit an issue if you are using this feature and would like it improved.

Trait Implementations§

Source§

impl Clone for Entities

Source§

fn clone(&self) -> Entities

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Entities

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Entities

Source§

fn default() -> Entities

Returns the “default value” for a type. Read more
Source§

impl IntoIterator for Entities

Source§

type Item = Entity

The type of the elements being iterated over.
Source§

type IntoIter = IntoIter

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> Self::IntoIter

Creates an iterator from a value. Read more
Source§

impl PartialEq for Entities

Source§

fn eq(&self, other: &Entities) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl RefCast for Entities

Source§

type From = Entities

Source§

fn ref_cast(_from: &Self::From) -> &Self

Source§

fn ref_cast_mut(_from: &mut Self::From) -> &mut Self

Source§

impl Eq for Entities

Source§

impl StructuralPartialEq for Entities

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.