Entity

Struct Entity 

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

Entity datatype

Implementations§

Source§

impl Entity

Source

pub fn new( uid: EntityUid, attrs: HashMap<String, RestrictedExpression>, parents: HashSet<EntityUid>, ) -> Result<Self, EntityAttrEvaluationError>

Create a new Entity with this Uid, attributes, and parents (and no tags).

Attribute values are specified here as “restricted expressions”. See docs on RestrictedExpression

let eid = EntityId::from_str("alice").unwrap();
let type_name = EntityTypeName::from_str("User").unwrap();
let euid = EntityUid::from_type_name_and_id(type_name, eid);
let attrs = HashMap::from([
    ("age".to_string(), RestrictedExpression::from_str("21").unwrap()),
    ("department".to_string(), RestrictedExpression::from_str("\"CS\"").unwrap()),
]);
let parent_eid = EntityId::from_str("admin").unwrap();
let parent_type_name = EntityTypeName::from_str("Group").unwrap();
let parent_euid = EntityUid::from_type_name_and_id(parent_type_name, parent_eid);
let parents = HashSet::from([parent_euid]);
let entity = Entity::new(euid, attrs, parents);
Source

pub fn new_no_attrs(uid: EntityUid, parents: HashSet<EntityUid>) -> Self

Create a new Entity with no attributes or tags.

Unlike Entity::new(), this constructor cannot error. (The only source of errors in Entity::new() are attributes.)

Source

pub fn new_with_tags( uid: EntityUid, attrs: impl IntoIterator<Item = (String, RestrictedExpression)>, parents: impl IntoIterator<Item = EntityUid>, tags: impl IntoIterator<Item = (String, RestrictedExpression)>, ) -> Result<Self, EntityAttrEvaluationError>

Create a new Entity with this Uid, attributes, parents, and tags.

Attribute and tag values are specified here as “restricted expressions”. See docs on RestrictedExpression.

Source

pub fn with_uid(uid: EntityUid) -> Self

Create a new Entity with this Uid, no attributes, and no parents.

let eid = EntityId::from_str("alice").unwrap();
let type_name = EntityTypeName::from_str("User").unwrap();
let euid = EntityUid::from_type_name_and_id(type_name, eid);
let alice = Entity::with_uid(euid);
Source

pub fn deep_eq(&self, other: &Self) -> bool

Test if two entities are structurally equal. That is, not only do they have the same UID, but they also have the same attributes and ancestors.

Note that ancestor equality is determined by examining the ancestors entities provided when constructing these objects, without computing their transitive closure. For accurate comparison, entities should be constructed with the transitive closure precomputed or be drawn from an Entities object which will perform this computation.

Source

pub fn uid(&self) -> EntityUid

Get the Uid of this entity

let type_name = EntityTypeName::from_str("User").unwrap();
let euid = EntityUid::from_type_name_and_id(type_name, eid);
let alice = Entity::with_uid(euid.clone());
assert_eq!(alice.uid(), euid);
Source

pub fn attr( &self, attr: &str, ) -> Option<Result<EvalResult, PartialValueToValueError>>

Get the value for the given attribute, or None if not present.

This can also return Some(Err) if the attribute is not a value (i.e., is unknown due to partial evaluation).

let eid = EntityId::from_str("alice").unwrap();
let type_name = EntityTypeName::from_str("User").unwrap();
let euid = EntityUid::from_type_name_and_id(type_name, eid);
let attrs = HashMap::from([
    ("age".to_string(), RestrictedExpression::from_str("21").unwrap()),
    ("department".to_string(), RestrictedExpression::from_str("\"CS\"").unwrap()),
]);
let entity = Entity::new(euid, attrs, HashSet::new()).unwrap();
assert_eq!(entity.attr("age").unwrap().unwrap(), EvalResult::Long(21));
assert_eq!(entity.attr("department").unwrap().unwrap(), EvalResult::String("CS".to_string()));
assert!(entity.attr("foo").is_none());
Source

pub fn tag( &self, tag: &str, ) -> Option<Result<EvalResult, PartialValueToValueError>>

Get the value for the given tag, or None if not present.

This can also return Some(Err) if the tag is not a value (i.e., is unknown due to partial evaluation).

Source

pub fn into_inner( self, ) -> (EntityUid, HashMap<String, RestrictedExpression>, HashSet<EntityUid>)

Consume the entity and return the entity’s owned Uid, attributes and parents.

Source

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

Parse an entity from an in-memory JSON value If a schema is provided, it is handled identically to Entities::from_json_str

Source

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

Parse an entity from a JSON string If a schema is provided, it is handled identically to Entities::from_json_str

Source

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

Parse an entity from a JSON reader If a schema is provided, it is handled identically to Entities::from_json_str

Source

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

Dump an Entity object into an entity 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 Entity object from JSON , use Self::from_json_file, Self::from_json_value, or Self::from_json_str.

Source

pub fn to_json_value(&self) -> Result<Value, EntitiesError>

Dump an Entity object into an in-memory JSON object.

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

To read an Entity object from JSON , use Self::from_json_file, Self::from_json_value, or Self::from_json_str.

Source

pub fn to_json_string(&self) -> Result<String, EntitiesError>

Dump an Entity object into a JSON string.

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

To read an Entity object from JSON , use Self::from_json_file, Self::from_json_value, or Self::from_json_str.

Trait Implementations§

Source§

impl Clone for Entity

Source§

fn clone(&self) -> Entity

Returns a duplicate 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 Entity

Source§

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

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

impl Display for Entity

Source§

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

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

impl From<&Entity> for Entity

Available on crate feature protobufs only.
Source§

fn from(v: &Entity) -> Entity

Converts to this type from the input type.
Source§

impl From<&Entity> for Entity

Available on crate feature protobufs only.
Source§

fn from(v: &Entity) -> Entity

Converts to this type from the input type.
Source§

impl Hash for Entity

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for Entity

Source§

fn eq(&self, other: &Entity) -> 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 Protobuf for Entity

Available on crate feature protobufs only.
Source§

fn encode(&self) -> Vec<u8>

Encode into protobuf format. Returns a freshly-allocated buffer containing binary data.
Source§

fn decode(buf: impl Buf) -> Result<Self, DecodeError>

Decode the binary data in buf, producing something of type Self Read more
Source§

impl RefCast for Entity

Source§

type From = Entity

Source§

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

Source§

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

Source§

impl Eq for Entity

Source§

impl StructuralPartialEq for Entity

Auto Trait Implementations§

§

impl Freeze for Entity

§

impl RefUnwindSafe for Entity

§

impl Send for Entity

§

impl Sync for Entity

§

impl Unpin for Entity

§

impl UnwindSafe for Entity

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, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToSmolStr for T
where T: Display + ?Sized,

Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. 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.