Changes Document::len to Document::top_level_fields_count

This commit is contained in:
Louis Dureuil 2024-11-21 15:00:31 +01:00
parent 4ed195426c
commit 32bcacefd5
No known key found for this signature in database
2 changed files with 24 additions and 13 deletions

View File

@ -160,7 +160,7 @@ impl<'doc, D: DocumentTrait<'doc> + Debug> ObjectView for ParseableDocument<'doc
} }
fn size(&self) -> i64 { fn size(&self) -> i64 {
self.document.len() as i64 self.document.top_level_fields_count() as i64
} }
fn keys<'k>(&'k self) -> Box<dyn Iterator<Item = KStringCow<'k>> + 'k> { fn keys<'k>(&'k self) -> Box<dyn Iterator<Item = KStringCow<'k>> + 'k> {

View File

@ -21,11 +21,8 @@ pub trait Document<'doc> {
/// - The `_vectors` and `_geo` fields are **ignored** by this method, meaning they are **not returned** by this method. /// - The `_vectors` and `_geo` fields are **ignored** by this method, meaning they are **not returned** by this method.
fn iter_top_level_fields(&self) -> impl Iterator<Item = Result<(&'doc str, &'doc RawValue)>>; fn iter_top_level_fields(&self) -> impl Iterator<Item = Result<(&'doc str, &'doc RawValue)>>;
fn len(&self) -> usize; /// Number of top level fields, **excluding** `_vectors` and `_geo`
fn top_level_fields_count(&self) -> usize;
fn is_empty(&self) -> bool {
self.len() == 0
}
/// Get the **top-level** with the specified name, if exists. /// Get the **top-level** with the specified name, if exists.
/// ///
@ -105,8 +102,15 @@ impl<'t, Mapper: FieldIdMapper> Document<'t> for DocumentFromDb<'t, Mapper> {
self.field("_geo") self.field("_geo")
} }
fn len(&self) -> usize { fn top_level_fields_count(&self) -> usize {
self.content.iter().count() let has_vectors_field = self.vectors_field().unwrap_or(None).is_some();
let has_geo_field = self.geo_field().unwrap_or(None).is_some();
let count = self.content.iter().count();
match (has_vectors_field, has_geo_field) {
(true, true) => count - 2,
(true, false) | (false, true) => count - 1,
(false, false) => count,
}
} }
fn top_level_field(&self, k: &str) -> Result<Option<&'t RawValue>> { fn top_level_field(&self, k: &str) -> Result<Option<&'t RawValue>> {
@ -162,8 +166,15 @@ impl<'a, 'doc> Document<'doc> for DocumentFromVersions<'a, 'doc> {
Ok(self.versions.geo_field()) Ok(self.versions.geo_field())
} }
fn len(&self) -> usize { fn top_level_fields_count(&self) -> usize {
self.versions.len() let has_vectors_field = self.vectors_field().unwrap_or(None).is_some();
let has_geo_field = self.geo_field().unwrap_or(None).is_some();
let count = self.versions.len();
match (has_vectors_field, has_geo_field) {
(true, true) => count - 2,
(true, false) | (false, true) => count - 1,
(false, false) => count,
}
} }
fn top_level_field(&self, k: &str) -> Result<Option<&'doc RawValue>> { fn top_level_field(&self, k: &str) -> Result<Option<&'doc RawValue>> {
@ -243,7 +254,7 @@ impl<'d, 'doc: 'd, 't: 'd, Mapper: FieldIdMapper> Document<'d>
db.geo_field() db.geo_field()
} }
fn len(&self) -> usize { fn top_level_fields_count(&self) -> usize {
self.iter_top_level_fields().count() self.iter_top_level_fields().count()
} }
@ -274,8 +285,8 @@ where
D::geo_field(self) D::geo_field(self)
} }
fn len(&self) -> usize { fn top_level_fields_count(&self) -> usize {
D::len(self) D::top_level_fields_count(self)
} }
fn top_level_field(&self, k: &str) -> Result<Option<&'doc RawValue>> { fn top_level_field(&self, k: &str) -> Result<Option<&'doc RawValue>> {