engram-memory 0.6.0

Core binary and shared infrastructure for Engram memory system
Documentation
use std::sync::Arc;

use serde::Deserialize;
use serde_json::{Value, json};

use crate::error::CoreError;
use crate::lock_helpers;
use crate::persistence::hash_string_to_u64;
use crate::server::ServerState;

#[derive(Deserialize)]
struct DeleteParams {
    id: String,
}

pub async fn handle(state: &Arc<ServerState>, params: Value) -> Result<Value, CoreError> {
    let parsed: DeleteParams = serde_json::from_value(params)
        .map_err(|error| CoreError::DispatchError(error.to_string()))?;
    let id = parsed.id;
    let state_clone = Arc::clone(state);
    tokio::task::spawn_blocking(move || {
        {
            let database = lock_helpers::lock_db(&state_clone);
            database.delete_memory(&id)?;
        }
        let hashed = hash_string_to_u64(&id);
        let mut indexes = lock_helpers::write_indexes(&state_clone);
        if indexes.contains(hashed) {
            indexes.delete(hashed).map_err(CoreError::Hnsw)?;
        }
        Ok::<Value, CoreError>(json!({ "deleted": id }))
    })
    .await
    .map_err(|error| CoreError::SocketError(error.to_string()))?
}