use-nosql 0.1.0

Feature-gated facade crate for RustUse NoSQL data modeling primitives
Documentation
use use_nosql::{
    CacheKey, CacheNamespace, CollectionName, DocumentId, DocumentPath, Embedding, PatchOperation,
    PatchSet, SimilarityMetric, VectorDimension, VectorId, VectorRecord,
};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let collection = CollectionName::new("customers");
    let document_id = DocumentId::new("customer_123");
    let patch = PatchSet::new(vec![PatchOperation::set(
        DocumentPath::new("profile.display_name"),
        "Joshua Whalen",
    )]);

    let key = CacheKey::builder()
        .namespace(CacheNamespace::new("reviews"))
        .segment("google-business-profile")
        .segment("location")
        .segment("fort-wayne")
        .segment("summary")
        .build();

    let record = VectorRecord::new(
        VectorId::new("review_789_embedding"),
        Embedding::new(vec![0.012, -0.032, 0.481]),
    )
    .with_dimension(VectorDimension::new(3))?
    .with_similarity_metric(SimilarityMetric::Cosine);

    assert_eq!(collection.as_str(), "customers");
    assert_eq!(document_id.as_str(), "customer_123");
    assert_eq!(patch.operations().len(), 1);
    assert_eq!(
        key.to_string(),
        "reviews:google-business-profile:location:fort-wayne:summary"
    );
    assert_eq!(record.dimension(), Some(VectorDimension::new(3)));

    Ok(())
}