use std::time::Duration;
use hipstr::HipByt;
use crate::{Col, ColIdx, Val};
#[derive(Clone, Debug)]
pub struct Field {
pub name: Col,
pub default: Val,
}
#[derive(Clone, Debug)]
pub struct Index {
pub cols: Vec<ColIdx>,
pub unique: bool,
}
#[derive(Clone, Debug)]
pub struct Schema {
pub name: HipByt<'static>,
pub col_li: Vec<Field>,
pub sub_table_key_li: Vec<Field>,
pub index_li: Vec<Index>,
pub max_depth: Option<usize>,
pub ttl: Option<Duration>,
}
impl Schema {
#[inline]
pub fn col_idx(&self, name: &[u8]) -> Option<ColIdx> {
self
.col_li
.iter()
.enumerate() .find(|(_, f)| f.name.as_slice() == name) .and_then(|(i, _)| i.try_into().ok()) }
#[inline]
pub fn sub_idx(&self, name: &[u8]) -> Option<ColIdx> {
self
.sub_table_key_li
.iter()
.enumerate() .find(|(_, f)| f.name.as_slice() == name) .and_then(|(i, _)| i.try_into().ok()) }
}