pub use self::{
index::{GenericIndex, Index, IndexMetadata, OwnedIndex},
space::{Space, SpaceMetadata},
};
use std::fmt;
use rmpv::Value;
use serde::{Deserialize, Serialize};
mod index;
mod space;
pub const USER_SPACE_MIN_ID: u32 = 512;
pub const PRIMARY_INDEX_ID: u32 = 0;
#[derive(Clone, Copy, Debug, Deserialize, Serialize, PartialEq, Eq, Hash)]
#[repr(u32)]
pub enum SystemSpacesId {
VSpace = 281,
VIndex = 289,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum SchemaEntityKey {
Name(String),
Id(u32),
}
impl fmt::Display for SchemaEntityKey {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
SchemaEntityKey::Name(x) => write!(f, "name '{x}'"),
SchemaEntityKey::Id(x) => write!(f, "id '{x}'"),
}
}
}
impl From<&str> for SchemaEntityKey {
fn from(value: &str) -> Self {
Self::Name(value.to_owned())
}
}
impl From<u32> for SchemaEntityKey {
fn from(value: u32) -> Self {
Self::Id(value)
}
}
impl From<SchemaEntityKey> for Value {
fn from(val: SchemaEntityKey) -> Self {
match val {
SchemaEntityKey::Name(x) => x.into(),
SchemaEntityKey::Id(x) => x.into(),
}
}
}
impl SchemaEntityKey {
pub(crate) fn space_index_id(&self) -> u32 {
match self {
SchemaEntityKey::Name(_) => 2,
SchemaEntityKey::Id(_) => 0,
}
}
pub(crate) fn into_value(self) -> Value {
self.into()
}
}