use crate::addressing::Address; use crate::entry::Attribute; use crate::entry::InvariantEntry; use crate::hash::{LargeMultihash, UpMultihash}; /// Attribute denoting (hierarchical) relation, in the "upwards" direction. For example, a file `IN` a group, an image `IN` photos, etc. pub const ATTR_IN: &str = "IN"; /// Attribute denoting that an entry belongs to the set relating to a given (hierarchical) relation. /// For example, a data blob may have a label entry, and to qualify that label within the context of belonging to a given hierarchical group, that label entry and the hierarchical entry will be linked with `BY`. pub const ATTR_BY: &str = "BY"; /// Attribute denoting that an attribute belongs to a given "tagging" entity. If an entity belongs to (`IN`) a "tagging" entity, it is expected to have attributes that are `OF` that entity. pub const ATTR_OF: &str = "OF"; /// Attribute denoting a human readable label. pub const ATTR_LABEL: &str = "LBL"; /// Attribute denoting the date & time an entity was noted in the database. /// (TODO: This info can be trivially derived from existing entry timestamps, while at the same time the "Introduction problem" is still open.) pub const ATTR_ADDED: &str = "ADDED"; /// Attribute for cross-vault unambiguous referencing of non-hashable (e.g. UUID) entities. pub const ATTR_KEY: &str = "KEY"; lazy_static! { pub static ref HIER_ROOT_INVARIANT: InvariantEntry = InvariantEntry { attribute: ATTR_KEY.parse().unwrap(), value: "HIER_ROOT".into(), }; pub static ref HIER_ROOT_ADDR: Address = HIER_ROOT_INVARIANT.entity().unwrap(); pub static ref TYPE_HASH_ADDRESS: Address = Address::Hash(UpMultihash::from(LargeMultihash::default())); pub static ref TYPE_UUID_ADDRESS: Address = Address::Uuid(uuid::Uuid::nil()); pub static ref TYPE_ATTRIBUTE_ADDRESS: Address = Address::Attribute(Attribute::null()); pub static ref TYPE_URL_ADDRESS: Address = Address::Url(url::Url::parse("up:").unwrap()); }