[][src]Struct entity::UntypedEnt

pub struct UntypedEnt { /* fields omitted */ }

Represents a general-purpose ent that is shapeless (no hard type) and maintains fields and edges using internal maps. This ent can optionally be connected to a database and supports additional functionality like loading ents from edges when connected.

Implementations

impl UntypedEnt[src]

pub fn new(
    id: Id,
    fields: HashMap<String, Field>,
    edges: HashMap<String, Edge>
) -> Self
[src]

Creates a new ent using the given id, field map, and edge map

pub fn empty_with_id(id: Id) -> Self[src]

Creates an empty ent with the provided id

pub fn from_collections<FI: IntoIterator<Item = Field>, EI: IntoIterator<Item = Edge>>(
    id: Id,
    field_collection: FI,
    edge_collection: EI
) -> Self
[src]

Creates a map ent with the provided id, fields from the given collection, and edges from the other given collection

pub fn update_field<N: Into<String>, V: Into<Value>>(
    &mut self,
    into_name: N,
    into_value: V
) -> Result<Value, EntMutationError>
[src]

Replaces the ent's local field's value with the given value, returning the old previous value if the field exists

If the field does not exist, does NOT insert the value as a new field

pub fn add_ents_to_edge<N: Into<String>, I: IntoIterator<Item = Id>>(
    &mut self,
    name: N,
    ids: I
) -> Result<(), EntMutationError>
[src]

Updates the ent's local edge's list to contain the provided ids

If there are too many ids (in the case of >1 for MaybeOne/One), this method will fail.

pub fn remove_ents_from_edge<N: Into<String>, I: IntoIterator<Item = Id>>(
    &mut self,
    name: N,
    ids: I
) -> Result<(), EntMutationError>
[src]

Updates the ent's local edge's list to remove the provided ids

If this would result in an invalid edge (One being empty), this method will fail.

pub fn remove_ents_from_all_edges<I: IntoIterator<Item = Id>>(
    &mut self,
    ids: I
) -> Result<(), EntMutationError>
[src]

Updates all of the ent's local edges to remove the provided ids

If this would result in an invalid edge (One being empty), this method will fail.

Trait Implementations

impl Clone for UntypedEnt[src]

impl Debug for UntypedEnt[src]

impl Default for UntypedEnt[src]

pub fn default() -> Self[src]

Creates an untyped ent with the ephemeral id

impl Display for UntypedEnt[src]

impl Ent for UntypedEnt[src]

pub fn id(&self) -> Id[src]

Represents the unique id associated with each entity instance

Examples

use entity::{Ent, UntypedEnt};

let ent = UntypedEnt::empty_with_id(999);
assert_eq!(ent.id(), 999);

pub fn set_id(&mut self, id: Id)[src]

Updates the id of this ent, useful for databases that want to adjust the id or when you want to produce a clone of the ent in a database by resetting its id to ephemeral prior to storing it

pub fn type(&self) -> &str[src]

Represents a unique type associated with the entity, used for lookups, indexing by type, and conversions

Examples

use entity::{UntypedEnt, Ent};

let ent = UntypedEnt::default();
assert_eq!(ent.r#type(), "entity::ent::UntypedEnt");

pub fn created(&self) -> u64[src]

Represents the time when the instance of the ent was created as the milliseconds since epoch (1970-01-01 00:00:00 UTC)

pub fn last_updated(&self) -> u64[src]

Represents the time when the instance of the ent was last updated as the milliseconds since epoch (1970-01-01 00:00:00 UTC)

pub fn mark_updated(&mut self) -> Result<(), EntMutationError>[src]

Updates the local, internal timestamp of this ent instance

pub fn field_definitions(&self) -> Vec<FieldDefinition>[src]

Represents the definitions of fields contained within the ent instance

Examples

use entity::{Ent, UntypedEnt, Field, FieldDefinition, ValueType};
use std::str::FromStr;

let fields = vec![
    Field::new("field1", 123u8),
    Field::new("field2", "some text"),
];
let ent = UntypedEnt::from_collections(0, fields.iter().cloned(), vec![]);

let defs = ent.field_definitions();
assert_eq!(defs.len(), 2);
assert!(defs.contains(&FieldDefinition::new(
    "field1",
    ValueType::from_str("u8").unwrap(),
)));
assert!(defs.contains(&FieldDefinition::new(
    "field2",
    ValueType::Text,
)));

pub fn field_names(&self) -> Vec<String>[src]

Represents the names of fields contained within the ent instance

Examples

use entity::{Ent, UntypedEnt, Field};

let fields = vec![
    Field::new("field1", 123u8),
    Field::new("field2", "some text"),
];
let ent = UntypedEnt::from_collections(0, fields.iter().cloned(), vec![]);

let names = ent.field_names();
assert_eq!(names.len(), 2);
assert!(names.contains(&String::from("field1")));
assert!(names.contains(&String::from("field2")));

pub fn field(&self, name: &str) -> Option<Value>[src]

Returns a copy of the value of the field with the specified name

Examples

use entity::{Ent, UntypedEnt, Field, Value};

let fields = vec![
    Field::new("field1", 123u8),
    Field::new("field2", "some text"),
];
let ent = UntypedEnt::from_collections(0, fields.iter().cloned(), vec![]);

assert_eq!(ent.field("field1"), Some(Value::from(123u8)));
assert_eq!(ent.field("unknown"), None);

pub fn update_field(
    &mut self,
    name: &str,
    value: Value
) -> Result<Value, EntMutationError>
[src]

Updates the local value of a field with the specified name, returning the old field value if updated

Examples

use entity::{Ent, UntypedEnt, Field, Value};

let fields = vec![
    Field::new("field1", 123u8),
    Field::new("field2", "some text"),
];
let mut ent = UntypedEnt::from_collections(0, fields.iter().cloned(), vec![]);

ent.update_field("field1", Value::from(5u8)).unwrap();
assert_eq!(ent.field("field1"), Some(Value::from(5u8)));

pub fn edge_definitions(&self) -> Vec<EdgeDefinition>[src]

Represents the definitions of edges contained within the ent instance

Examples

use entity::{Ent, UntypedEnt, Edge, EdgeDefinition, EdgeValueType};
use std::str::FromStr;

let edges = vec![
    Edge::new("edge1", 99),
    Edge::new("edge2", vec![1, 2, 3]),
];
let ent = UntypedEnt::from_collections(0, vec![], edges);

let defs = ent.edge_definitions();
assert_eq!(defs.len(), 2);
assert!(defs.contains(&EdgeDefinition::new(
    "edge1",
    EdgeValueType::One,
)));
assert!(defs.contains(&EdgeDefinition::new(
    "edge2",
    EdgeValueType::Many,
)));

pub fn edge_names(&self) -> Vec<String>[src]

Returns a list of names of edges contained by the ent

Examples

use entity::{Ent, UntypedEnt, Edge};

let edges = vec![
    Edge::new("edge1", 99),
    Edge::new("edge2", vec![1, 2, 3]),
];
let ent = UntypedEnt::from_collections(0, vec![], edges);

let names = ent.edge_names();
assert_eq!(names.len(), 2);
assert!(names.contains(&String::from("edge1")));
assert!(names.contains(&String::from("edge2")));

pub fn edge(&self, name: &str) -> Option<EdgeValue>[src]

Returns a copy of the value of the edge with the specified name

Examples

use entity::{Ent, UntypedEnt, Edge, EdgeValue};

let edges = vec![
    Edge::new("edge1", 99),
    Edge::new("edge2", vec![1, 2, 3]),
];
let ent = UntypedEnt::from_collections(0,  vec![], edges);

assert_eq!(ent.edge("edge1"), Some(EdgeValue::One(99)));
assert_eq!(ent.edge("edge2"), Some(EdgeValue::Many(vec![1, 2, 3])));
assert_eq!(ent.edge("unknown"), None);

pub fn update_edge(
    &mut self,
    name: &str,
    value: EdgeValue
) -> Result<EdgeValue, EntMutationError>
[src]

Updates the local value of an edge with the specified name, returning the old edge value if updated

Examples

use entity::{Ent, UntypedEnt, Edge, EdgeValue};

let edges = vec![
    Edge::new("edge1", 99),
    Edge::new("edge2", vec![1, 2, 3]),
];
let mut ent = UntypedEnt::from_collections(0,  vec![], edges);

ent.update_edge("edge1", EdgeValue::One(123)).unwrap();
assert_eq!(ent.edge("edge1"), Some(EdgeValue::One(123)));

pub fn connect(&mut self, database: WeakDatabaseRc)[src]

Connects ent to the given boxed database trait object so all future database-related operations will be performed against this database

pub fn disconnect(&mut self)[src]

Disconnects ent from the given database. All future database-related operations will fail with a disconnected database error

pub fn is_connected(&self) -> bool[src]

Returns true if ent is currently connected to a database

pub fn load_edge(&self, name: &str) -> DatabaseResult<Vec<Box<dyn Ent>>>[src]

Loads the ents connected by the edge with the given name

Requires ent to be connected to a database

pub fn refresh(&mut self) -> DatabaseResult<()>[src]

Refreshes ent by checking database for latest version and returning it

Requires ent to be connected to a database

pub fn commit(&mut self) -> DatabaseResult<()>[src]

Saves the ent to the database, updating this local instance's id if the database has reported a new id

Requires ent to be connected to a database

pub fn remove(&self) -> DatabaseResult<bool>[src]

Removes self from database, returning true if successful

Requires ent to be connected to a database

impl EntType for UntypedEnt[src]

pub fn type_str() -> &'static str[src]

Represents a unique type associated with the entity, used for lookups, indexing by type, and conversions

Examples

use entity::{UntypedEnt, EntType};

assert_eq!(UntypedEnt::type_str(), "entity::ent::UntypedEnt");

impl Eq for UntypedEnt[src]

impl PartialEq<UntypedEnt> for UntypedEnt[src]

pub fn eq(&self, other: &Self) -> bool[src]

Untyped Ents are considered equal if their ids, fields, edges, creation date, and updated date are all equal

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> DynClone for T where
    T: Clone
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T> ToString for T where
    T: Display + ?Sized
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.