radn-rs/src/func/shared.rs
timofey dc98e38b8f
All checks were successful
buildbot/cargo fmt (1.71) Build done.
buildbot/cargo doc (1.71) Build done.
buildbot/cargo clippy (1.71) Build done.
buildbot/cargo test (1.65) Build done.
buildbot/cargo clippy (1.65) Build done.
Send everything
2023-08-11 00:14:44 +00:00

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)
}
}