From 921b063a7112e4e29f13edf8add43006e4c15f01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Renault?= Date: Thu, 16 May 2019 11:59:31 +0200 Subject: [PATCH] feat: Make the `DocumentsDeletion` public interface to take serde types --- .../src/database/documents_deletion.rs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/meilidb-data/src/database/documents_deletion.rs b/meilidb-data/src/database/documents_deletion.rs index 775b8d7f6..5f1424f3b 100644 --- a/meilidb-data/src/database/documents_deletion.rs +++ b/meilidb-data/src/database/documents_deletion.rs @@ -4,6 +4,7 @@ use std::sync::Arc; use sdset::{SetBuf, SetOperation, duo::DifferenceByKey}; use fst::{SetBuilder, Streamer}; use meilidb_core::DocumentId; +use crate::serde::extract_document_id; use super::{Index, Error, InnerIndex}; @@ -17,10 +18,26 @@ impl<'a> DocumentsDeletion<'a> { DocumentsDeletion { inner, documents: Vec::new() } } - pub fn delete_document(&mut self, id: DocumentId) { + fn delete_document_by_id(&mut self, id: DocumentId) { self.documents.push(id); } + pub fn delete_document(&mut self, document: D) -> Result<(), Error> + where D: serde::Serialize, + { + let schema = &self.inner.lease_inner().schema; + let identifier = schema.identifier_name(); + + let document_id = match extract_document_id(identifier, &document)? { + Some(id) => id, + None => return Err(Error::MissingDocumentId), + }; + + self.delete_document_by_id(document_id); + + Ok(()) + } + pub fn finalize(mut self) -> Result<(), Error> { let lease_inner = self.inner.lease_inner(); let main = &lease_inner.raw.main;