zeppelin-embed 0.8.0

In-process vector, lexical, and hybrid search for macOS and Apple silicon
Documentation
#![allow(clippy::expect_used)]

use std::sync::{Mutex, MutexGuard, OnceLock};

use tempfile::{TempDir, tempdir};
use zeppelin_embed::lifecycle::durability::{CommitTier, DurabilityMode, DurabilityPolicy};
use zeppelin_embed::manifest::Manifest;
use zeppelin_embed::manifest::io::commit_manifest;
use zeppelin_embed::meta::{AliveSet, ColumnStoreBuilder, Schema};
use zeppelin_embed::quant::Bit4Factors;
use zeppelin_embed::segment::SegmentId;
use zeppelin_embed::segment::writer::{SegmentBuild, SegmentFactors, write_segment};
use zeppelin_embed::vfs::StdVfs;

pub fn test_guard() -> MutexGuard<'static, ()> {
    static TEST_GUARD: OnceLock<Mutex<()>> = OnceLock::new();
    match TEST_GUARD.get_or_init(|| Mutex::new(())).lock() {
        Ok(guard) => guard,
        Err(poisoned) => poisoned.into_inner(),
    }
}

pub fn published_store(generation: u64) -> TempDir {
    let directory = tempdir().expect("published store directory");
    let schema = Schema::new(Vec::new()).expect("timestamp-only schema");
    let mut columns = ColumnStoreBuilder::new(schema.clone());
    columns.push_row(17, &[]).expect("fixture row");
    let columns = columns.finish().expect("fixture columns");
    let alive = AliveSet::new(1);
    let id = SegmentId::new(0x0102_0304_0506, [0x09; 10]);
    let codes = [0x88_u8];
    let factors = [Bit4Factors::from_persisted(1.0, 1.0, 1.0)];
    let rescore = [0.0_f32, 0.0_f32];
    let policy = DurabilityPolicy::new(DurabilityMode::Derived, CommitTier::Ordered)
        .expect("derived policy");
    let segment = write_segment(
        &StdVfs,
        directory.path(),
        SegmentBuild {
            id,
            scheme: 4,
            dims: 2,
            codes: &codes,
            factors: SegmentFactors::Bit4(&factors),
            rescore: &rescore,
            columns: &columns,
            alive: &alive,
        },
        policy,
    )
    .expect("fixture segment");
    commit_manifest(
        &StdVfs,
        directory.path(),
        &Manifest {
            #[cfg(feature = "graph-cypher")]
            graph: None,
            generation,
            log_seq: 0,
            segments: vec![segment],
            epochs: Vec::new(),
            epoch_alias: None,
            schema,
        },
        policy,
    )
    .expect("fixture manifest");
    directory
}