37 lines
1.1 KiB
Rust
37 lines
1.1 KiB
Rust
use super::{weakfunctorany::WeakFunctorAny, WeakFunctor};
|
|
pub use radn_derive::SharedFunctorAny;
|
|
|
|
pub trait SharedFunctorAny: WeakFunctorAny {
|
|
type SharedAny<'a, A: 'a + Send + Sync + Clone>: 'a + Send + Sync + Clone
|
|
where
|
|
Self: 'a;
|
|
|
|
fn share<'a, A: 'a + Send + Sync + Clone>(fa: Self::FAny<'a, A>) -> Self::SharedAny<'a, A>
|
|
where
|
|
Self: 'a;
|
|
|
|
fn unshare<'a, A: 'a + Send + Sync + Clone>(sa: Self::SharedAny<'a, A>) -> Self::FAny<'a, A>
|
|
where
|
|
Self: 'a;
|
|
}
|
|
|
|
pub trait SharedFunctor<'a>: WeakFunctor<'a> {
|
|
type Shared<A: 'a + Send + Sync + Clone>: 'a + Send + Sync + Clone;
|
|
|
|
fn share<A: 'a + Send + Sync + Clone>(fa: Self::F<A>) -> Self::Shared<A>;
|
|
|
|
fn unshare<A: 'a + Send + Sync + Clone>(sa: Self::Shared<A>) -> Self::F<A>;
|
|
}
|
|
|
|
impl<'a, T: 'a + SharedFunctorAny> SharedFunctor<'a> for T {
|
|
type Shared<A: 'a + Send + Sync + Clone> = T::SharedAny<'a, A>;
|
|
|
|
fn share<A: 'a + Send + Sync + Clone>(fa: Self::F<A>) -> Self::Shared<A> {
|
|
T::share(fa)
|
|
}
|
|
|
|
fn unshare<A: 'a + Send + Sync + Clone>(sa: Self::Shared<A>) -> Self::F<A> {
|
|
T::unshare(sa)
|
|
}
|
|
}
|