use std::collections::BTreeMap;
use crate::AttrId;
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum ValueType {
Bool,
Long,
Double,
Instant,
Uuid,
Keyword,
Str,
Bytes,
Ref,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum Cardinality {
One,
Many,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum Unique {
Identity,
Value,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct Attribute {
pub id: AttrId,
pub value_type: ValueType,
pub cardinality: Cardinality,
pub unique: Option<Unique>,
pub is_component: bool,
pub indexed: bool,
pub no_history: bool,
}
#[derive(Clone, Debug, Default, Eq, PartialEq)]
pub struct Schema {
attrs: BTreeMap<AttrId, Attribute>,
}
impl Schema {
pub fn insert(&mut self, attr: Attribute) {
self.attrs.insert(attr.id, attr);
}
#[must_use]
pub fn get(&self, id: AttrId) -> Option<&Attribute> {
self.attrs.get(&id)
}
pub fn iter(&self) -> impl Iterator<Item = (&AttrId, &Attribute)> {
self.attrs.iter()
}
}