doublets/decorators/
deletion.rs1use std::{
6 fmt::{self, Debug, Formatter},
7 marker::PhantomData,
8};
9
10use data::{Flow, LinkReference, LinksConstants};
11
12use super::{
13 helpers,
14 macros::{decorator_struct, forward},
15};
16use crate::{
17 data::{ReadHandler, WriteHandler},
18 Doublets, Error, Fuse, Link, Links,
19};
20
21decorator_struct! {
22 NonNullContentsLinkDeletionResolver
27}
28
29impl<T: LinkReference, L: Doublets<T>> Links<T> for NonNullContentsLinkDeletionResolver<T, L> {
30 forward!(count_links, each_links, create_links, update_links);
31
32 #[inline]
33 fn delete_links(
34 &mut self,
35 query: &[T],
36 handler: WriteHandler<'_, T>,
37 ) -> Result<Flow, Error<T>> {
38 let index = helpers::part(query, self.links.constants().index_part);
39 let mut fuse = Fuse::new(&mut *handler);
40 helpers::enforce_reset_values(&mut self.links, index, &mut |before, after| {
41 fuse.call(before, after)
42 })?;
43 self.links
44 .delete_links(query, &mut |before, after| fuse.call(before, after))
45 }
46}