diff --git a/doublets/src/data/traits.rs b/doublets/src/data/traits.rs index 2337fbe..00464d4 100644 --- a/doublets/src/data/traits.rs +++ b/doublets/src/data/traits.rs @@ -34,7 +34,27 @@ pub trait Links: Send + Sync { -> Result>; } -pub trait Doublets: Links { +pub trait Doublets: Send + Sync { + fn constants(&self) -> &LinksConstants; + + fn count_links(&self, query: &[T]) -> T; + + fn create_links(&mut self, query: &[T], handler: WriteHandler<'_, T>) + -> Result>; + + fn each_links(&self, query: &[T], handler: ReadHandler<'_, T>) -> Flow; + + fn update_links( + &mut self, + query: &[T], + change: &[T], + handler: WriteHandler<'_, T>, + ) -> Result>; + + fn delete_links(&mut self, query: &[T], handler: WriteHandler<'_, T>) + -> Result>; + + fn get_link(&self, index: T) -> Option>; fn count_by(&self, query: impl ToQuery) -> T where Self: Sized, @@ -253,8 +273,6 @@ pub trait Doublets: Links { self.get_link(index).ok_or(Error::NotExists(index)) } - fn get_link(&self, index: T) -> Option>; - fn delete_all(&mut self) -> Result<(), Error> where Self: Sized, @@ -551,6 +569,37 @@ pub trait Doublets: Links { } } +impl + ?Sized> Links for D { + fn constants(&self) -> &LinksConstants { + self.constants() + } + + fn count_links(&self, query: &[T]) -> T { + self.count_links(query) + } + + fn create_links(&mut self, query: &[T], handler: WriteHandler<'_, T>) -> Result> { + self.create_links(query, handler) + } + + fn each_links(&self, query: &[T], handler: ReadHandler<'_, T>) -> Flow { + self.each_links(query, handler) + } + + fn update_links( + &mut self, + query: &[T], + change: &[T], + handler: WriteHandler<'_, T>, + ) -> Result> { + self.update_links(query, change, handler) + } + + fn delete_links(&mut self, query: &[T], handler: WriteHandler<'_, T>) -> Result> { + self.delete_links(query, handler) + } +} + impl + ?Sized> Links for Box { fn constants(&self) -> &LinksConstants { (**self).constants() diff --git a/doublets/src/mem/unit/store.rs b/doublets/src/mem/unit/store.rs index 5231732..3ce99c3 100644 --- a/doublets/src/mem/unit/store.rs +++ b/doublets/src/mem/unit/store.rs @@ -321,7 +321,7 @@ impl>, TS: UnitTree, TT: UnitTree, TU: } impl>, TS: UnitTree, TT: UnitTree, TU: UnitList> - Links for Store + Doublets for Store { fn constants(&self) -> &LinksConstants { &self.constants @@ -552,11 +552,7 @@ impl>, TS: UnitTree, TT: UnitTree, TU: Ok(handler(link, Link::nothing())) } -} -impl>, TS: UnitTree, TT: UnitTree, TU: UnitList> - Doublets for Store -{ fn get_link(&self, index: T) -> Option> { if self.exists(index) { // SAFETY: links is exists