use std::sync::Arc;
use crate::db::Database;
use crate::import::{ImportError, ImportOptions};
use super::reader::OpenClawMemoryChunk;
pub async fn import_chunk(
db: &Arc<dyn Database>,
chunk: &OpenClawMemoryChunk,
opts: &ImportOptions,
) -> Result<(), ImportError> {
let doc = db
.get_or_create_document_by_path(&opts.user_id, None, &chunk.path)
.await
.map_err(|e| ImportError::Database(e.to_string()))?;
let chunk_id = db
.insert_chunk(
doc.id,
chunk.chunk_index,
&chunk.content,
None, )
.await
.map_err(|e| ImportError::Database(e.to_string()))?;
if let Some(ref embedding) = chunk.embedding {
db.update_chunk_embedding(chunk_id, embedding)
.await
.map_err(|e| ImportError::Database(e.to_string()))?;
}
Ok(())
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_memory_chunk_import_structure() {
let chunk = OpenClawMemoryChunk {
path: "test/path.md".to_string(),
content: "Test content".to_string(),
embedding: Some(vec![0.1, 0.2, 0.3]),
chunk_index: 0,
};
assert_eq!(chunk.path, "test/path.md");
assert_eq!(chunk.chunk_index, 0);
assert!(chunk.embedding.is_some());
}
}