lix 0.12.0

Embeddable version control for apps and AI agents.
Documentation
use std::ops::Bound;

use bytes::Bytes;

use crate::storage::{Key, KeyRange, Prefix};

#[derive(Clone, Debug, PartialEq, Eq)]
pub struct StoragePredicate {
    pub id: PredicateId,
    pub expr: PredicateExpr,
}

#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub struct PredicateId(pub u32);

#[derive(Clone, Debug, PartialEq, Eq)]
pub enum PredicateExpr {
    Key(KeyPredicate),
    Header(HeaderPredicate),
    Refs(RefsPredicate),
}

#[derive(Clone, Debug, PartialEq, Eq)]
pub enum KeyPredicate {
    Eq(Key),
    StartsWith(Prefix),
    Range(KeyRange),
}

#[derive(Clone, Debug, PartialEq, Eq)]
pub enum HeaderPredicate {
    FieldEq {
        field: HeaderFieldId,
        value: ScalarValue,
    },
    FieldIn {
        field: HeaderFieldId,
        values: Vec<ScalarValue>,
    },
    FieldRange {
        field: HeaderFieldId,
        lower: Bound<ScalarValue>,
        upper: Bound<ScalarValue>,
    },
    IsDeleted(bool),
}

#[derive(Clone, Debug, PartialEq, Eq)]
pub enum RefsPredicate {
    HasRef { kind: RefKind, value: Bytes },
}

#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub struct HeaderFieldId(pub u16);

#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub struct RefKind(pub u16);

#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
pub enum ScalarValue {
    Bool(bool),
    U64(u64),
    I64(i64),
    Bytes(Bytes),
}

#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum Support {
    Exact,
    Inexact,
    Unsupported,
}

#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
pub enum PredicateSupportLevel {
    #[default]
    None,
    Inexact,
    Exact,
}