Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 17 additions & 19 deletions doublets-decorators/src/cascade_unique_resolver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,54 +11,52 @@ use crate::UniqueResolver;

type Base<T, Links> = UniqueResolver<T, Links>;

pub struct CascadeUniqueResolver<T: LinkType, L: Doublets<T>> {
pub struct CascadeUniqueResolver<L: Doublets> {
links: L,

_phantom: PhantomData<T>,
}
}

impl<T: LinkType, L: Doublets<T>> CascadeUniqueResolver<T, L> {
impl<L: Doublets> CascadeUniqueResolver<L> {
pub fn new(links: L) -> Self {
Self {
links,
_phantom: PhantomData,
}
}
}
}

impl<T: LinkType, L: Doublets<T>> Doublets<T> for CascadeUniqueResolver<T, L> {
fn constants(&self) -> LinksConstants<T> {
impl<L: Doublets> Doublets for CascadeUniqueResolver<L> {
fn constants(&self) -> &LinksConstants<Self::Item> {
self.links.constants()
}

fn count_by(&self, query: impl ToQuery<T>) -> T {
fn count_by(&self, query: impl ToQuery<Self::Item>) -> Self::Item {
self.links.count_by(query)
}

fn create_by_with<F, R>(&mut self, query: impl ToQuery<T>, handler: F) -> Result<R, Error<T>>
fn create_by_with<F, R>(&mut self, query: impl ToQuery<Self::Item>, handler: F) -> Result<R, Error<Self::Item>>
where
F: FnMut(Link<T>, Link<T>) -> R,
F: FnMut(Link<Self::Item>, Link<Self::Item>) -> R,
R: Try<Output = ()>,
{
self.links.create_by_with(query, handler)
}

fn each_by<F, R>(&self, restrictions: impl ToQuery<T>, handler: F) -> R
fn each_by<F, R>(&self, restrictions: impl ToQuery<Self::Item>, handler: F) -> R
where
F: FnMut(Link<T>) -> R,
F: FnMut(Link<Self::Item>) -> R,
R: Try<Output = ()>,
{
self.links.each_by(restrictions, handler)
}

fn update_by_with<F, R>(
&mut self,
query: impl ToQuery<T>,
change: impl ToQuery<T>,
query: impl ToQuery<Self::Item>,
change: impl ToQuery<Self::Item>,
mut handler: F,
) -> Result<R, Error<T>>
) -> Result<R, Error<Self::Item>>
where
F: FnMut(Link<T>, Link<T>) -> R,
F: FnMut(Link<Self::Item>, Link<Self::Item>) -> R,
R: Try<Output = ()>,
{
let links = self.links.borrow_mut();
Expand All @@ -78,9 +76,9 @@ impl<T: LinkType, L: Doublets<T>> Doublets<T> for CascadeUniqueResolver<T, L> {
links.update_with(index, source, target, handler)
}

fn delete_by_with<F, R>(&mut self, query: impl ToQuery<T>, handler: F) -> Result<R, Error<T>>
fn delete_by_with<F, R>(&mut self, query: impl ToQuery<Self::Item>, handler: F) -> Result<R, Error<Self::Item>>
where
F: FnMut(Link<T>, Link<T>) -> R,
F: FnMut(Link<Self::Item>, Link<Self::Item>) -> R,
R: Try<Output = ()>,
{
self.links.delete_by_with(query, handler)
Expand Down
35 changes: 17 additions & 18 deletions doublets-decorators/src/cascade_usages_resolver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,12 @@ use doublets::{

use doublets::{Doublets, Error, Link};

pub struct CascadeUsagesResolver<T: LinkType, L: Doublets<T>> {
pub struct CascadeUsagesResolver<L: Doublets> {
links: L,

_phantom: PhantomData<T>,
}
}

impl<T: LinkType, L: Doublets<T>> CascadeUsagesResolver<T, L> {
impl<L: Doublets> CascadeUsagesResolver<L> {
pub fn new(links: L) -> Self {
Self {
links,
Expand All @@ -22,51 +21,51 @@ impl<T: LinkType, L: Doublets<T>> CascadeUsagesResolver<T, L> {
}
}

impl<T: LinkType, L: Doublets<T>> Doublets<T> for CascadeUsagesResolver<T, L> {
fn constants(&self) -> LinksConstants<T> {
impl<L: Doublets> Doublets for CascadeUsagesResolver<L> {
fn constants(&self) -> &LinksConstants<Self::Item> {
self.links.constants()
}

fn count_by(&self, query: impl ToQuery<T>) -> T {
fn count_by(&self, query: impl ToQuery<Self::Item>) -> Self::Item {
self.links.count_by(query)
}

fn create_by_with<F, R>(&mut self, query: impl ToQuery<T>, handler: F) -> Result<R, Error<T>>
fn create_by_with<F, R>(&mut self, query: impl ToQuery<Self::Item>, handler: F) -> Result<R, Error<Self::Item>>
where
F: FnMut(Link<T>, Link<T>) -> R,
F: FnMut(Link<Self::Item>, Link<Self::Item>) -> R,
R: Try<Output = ()>,
{
self.links.create_by_with(query, handler)
}

fn each_by<F, R>(&self, restrictions: impl ToQuery<T>, handler: F) -> R
fn each_by<F, R>(&self, restrictions: impl ToQuery<Self::Item>, handler: F) -> R
where
F: FnMut(Link<T>) -> R,
F: FnMut(Link<Self::Item>) -> R,
R: Try<Output = ()>,
{
self.links.each_by(restrictions, handler)
}

fn update_by_with<F, R>(
&mut self,
query: impl ToQuery<T>,
change: impl ToQuery<T>,
query: impl ToQuery<Self::Item>,
change: impl ToQuery<Self::Item>,
handler: F,
) -> Result<R, Error<T>>
) -> Result<R, Error<Self::Item>>
where
F: FnMut(Link<T>, Link<T>) -> R,
F: FnMut(Link<Self::Item>, Link<Self::Item>) -> R,
R: Try<Output = ()>,
{
self.links.update_by_with(query, change, handler)
}

fn delete_by_with<F, R>(
&mut self,
query: impl ToQuery<T>,
query: impl ToQuery<Self::Item>,
mut handler: F,
) -> Result<R, Error<T>>
) -> Result<R, Error<Self::Item>>
where
F: FnMut(Link<T>, Link<T>) -> R,
F: FnMut(Link<Self::Item>, Link<Self::Item>) -> R,
R: Try<Output = ()>,
{
self.links
Expand Down
35 changes: 17 additions & 18 deletions doublets-decorators/src/non_null_deletion_resolver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,12 @@ use doublets::{

use doublets::{Doublets, Error, Link};

pub struct NonNullDeletionResolver<T: LinkType, L: Doublets<T>> {
pub struct NonNullDeletionResolver<L: Doublets> {
links: L,

_phantom: PhantomData<T>,
}
}

impl<T: LinkType, L: Doublets<T>> NonNullDeletionResolver<T, L> {
impl<L: Doublets> NonNullDeletionResolver<L> {
pub fn new(links: L) -> Self {
Self {
links,
Expand All @@ -22,51 +21,51 @@ impl<T: LinkType, L: Doublets<T>> NonNullDeletionResolver<T, L> {
}
}

impl<T: LinkType, L: Doublets<T>> Doublets<T> for NonNullDeletionResolver<T, L> {
fn constants(&self) -> LinksConstants<T> {
impl<L: Doublets> Doublets for NonNullDeletionResolver<L> {
fn constants(&self) -> &LinksConstants<Self::Item> {
self.links.constants()
}

fn count_by(&self, query: impl ToQuery<T>) -> T {
fn count_by(&self, query: impl ToQuery<Self::Item>) -> Self::Item {
self.links.count_by(query)
}

fn create_by_with<F, R>(&mut self, query: impl ToQuery<T>, handler: F) -> Result<R, Error<T>>
fn create_by_with<F, R>(&mut self, query: impl ToQuery<Self::Item>, handler: F) -> Result<R, Error<Self::Item>>
where
F: FnMut(Link<T>, Link<T>) -> R,
F: FnMut(Link<Self::Item>, Link<Self::Item>) -> R,
R: Try<Output = ()>,
{
self.links.create_by_with(query, handler)
}

fn each_by<F, R>(&self, restrictions: impl ToQuery<T>, handler: F) -> R
fn each_by<F, R>(&self, restrictions: impl ToQuery<Self::Item>, handler: F) -> R
where
F: FnMut(Link<T>) -> R,
F: FnMut(Link<Self::Item>) -> R,
R: Try<Output = ()>,
{
self.links.each_by(restrictions, handler)
}

fn update_by_with<F, R>(
&mut self,
query: impl ToQuery<T>,
change: impl ToQuery<T>,
query: impl ToQuery<Self::Item>,
change: impl ToQuery<Self::Item>,
handler: F,
) -> Result<R, Error<T>>
) -> Result<R, Error<Self::Item>>
where
F: FnMut(Link<T>, Link<T>) -> R,
F: FnMut(Link<Self::Item>, Link<Self::Item>) -> R,
R: Try<Output = ()>,
{
self.links.update_by_with(query, change, handler)
}

fn delete_by_with<F, R>(
&mut self,
query: impl ToQuery<T>,
query: impl ToQuery<Self::Item>,
mut handler: F,
) -> Result<R, Error<T>>
) -> Result<R, Error<Self::Item>>
where
F: FnMut(Link<T>, Link<T>) -> R,
F: FnMut(Link<Self::Item>, Link<Self::Item>) -> R,
R: Try<Output = ()>,
{
let null = self.links.constants().null;
Expand Down
68 changes: 49 additions & 19 deletions doublets-decorators/src/unique_resolver.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,54 +7,80 @@ use doublets::{

use doublets::{Doublets, Error, Link};

pub struct UniqueResolver<T: LinkType, L: Doublets<T>> {
pub struct UniqueResolver<L: Doublets> {
links: L,

_phantom: PhantomData<T>,
}
}

impl<T: LinkType, L: Doublets<T>> UniqueResolver<T, L> {
impl<L: Doublets> UniqueResolver<L> {
pub fn new(links: L) -> Self {
UniqueResolver {
links,
_phantom: PhantomData,
}
}
}
}

impl<T: LinkType, L: Doublets<T>> Doublets<T> for UniqueResolver<T, L> {
fn constants(&self) -> LinksConstants<T> {
impl<L: Doublets> Links for UniqueResolver<L> {
type Item = L::Item;

fn constants(&self) -> &LinksConstants<Self::Item> {
self.links.constants()
}

fn count_by(&self, query: impl ToQuery<T>) -> T {
fn count_links(&self, query: &[Self::Item]) -> Self::Item {
self.links.count_links(query)
}

fn create_links(&mut self, query: &[Self::Item], handler: doublets::WriteHandler<'_, Self::Item>)
-> Result<doublets::Flow, doublets::Error<Self::Item>> {
self.links.create_links(query, handler)
}

fn each_links(&self, query: &[Self::Item], handler: doublets::ReadHandler<'_, Self::Item>) -> doublets::Flow {
self.links.each_links(query, handler)
}

fn update_links(&mut self, query: &[Self::Item], change: &[Self::Item], handler: doublets::WriteHandler<'_, Self::Item>)
-> Result<doublets::Flow, doublets::Error<Self::Item>> {
self.links.update_links(query, change, handler)
}

fn delete_links(&mut self, query: &[Self::Item], handler: doublets::WriteHandler<'_, Self::Item>)
-> Result<doublets::Flow, doublets::Error<Self::Item>> {
self.links.delete_links(query, handler)
}
}

impl<L: Doublets> Doublets for UniqueResolver<L> {

fn count_by(&self, query: impl ToQuery<Self::Item>) -> Self::Item {
self.links.count_by(query)
}

fn create_by_with<F, R>(&mut self, query: impl ToQuery<T>, handler: F) -> Result<R, Error<T>>
fn create_by_with<F, R>(&mut self, query: impl ToQuery<Self::Item>, handler: F) -> Result<R, Error<Self::Item>>
where
F: FnMut(Link<T>, Link<T>) -> R,
F: FnMut(Link<Self::Item>, Link<Self::Item>) -> R,
R: Try<Output = ()>,
{
self.links.create_by_with(query, handler)
}

fn each_by<F, R>(&self, restrictions: impl ToQuery<T>, handler: F) -> R
fn each_by<F, R>(&self, restrictions: impl ToQuery<Self::Item>, handler: F) -> R
where
F: FnMut(Link<T>) -> R,
F: FnMut(Link<Self::Item>) -> R,
R: Try<Output = ()>,
{
self.links.each_by(restrictions, handler)
}

fn update_by_with<F, R>(
&mut self,
query: impl ToQuery<T>,
change: impl ToQuery<T>,
query: impl ToQuery<Self::Item>,
change: impl ToQuery<Self::Item>,
mut handler: F,
) -> Result<R, Error<T>>
) -> Result<R, Error<Self::Item>>
where
F: FnMut(Link<T>, Link<T>) -> R,
F: FnMut(Link<Self::Item>, Link<Self::Item>) -> R,
R: Try<Output = ()>,
{
let links = self.links.borrow_mut();
Expand All @@ -73,11 +99,15 @@ impl<T: LinkType, L: Doublets<T>> Doublets<T> for UniqueResolver<T, L> {
links.update_with(index, source, target, handler)
}

fn delete_by_with<F, R>(&mut self, query: impl ToQuery<T>, handler: F) -> Result<R, Error<T>>
fn delete_by_with<F, R>(&mut self, query: impl ToQuery<Self::Item>, handler: F) -> Result<R, Error<Self::Item>>
where
F: FnMut(Link<T>, Link<T>) -> R,
F: FnMut(Link<Self::Item>, Link<Self::Item>) -> R,
R: Try<Output = ()>,
{
self.links.delete_by_with(query, handler)
}

fn get_link(&self, index: Self::Item) -> Option<Link<Self::Item>> {
self.links.get_link(index)
}
}
Loading
Loading