#![allow(unused_imports)]
use super::*;
pub struct ArcBiTransformer<T, U, R> {
pub(super) function: Arc<dyn Fn(T, U) -> R + Send + Sync>,
pub(super) name: Option<String>,
}
impl<T, U, R> ArcBiTransformer<T, U, R> {
impl_transformer_common_methods!(
ArcBiTransformer<T, U, R>,
(Fn(T, U) -> R + Send + Sync + 'static),
|f| Arc::new(f)
);
impl_shared_transformer_methods!(
ArcBiTransformer<T, U, R>,
ArcConditionalBiTransformer,
into_arc,
Transformer,
Send + Sync + 'static
);
}
impl_transformer_constant_method!(thread_safe ArcBiTransformer<T, U, R>);
impl_transformer_debug_display!(ArcBiTransformer<T, U, R>);
impl_transformer_clone!(ArcBiTransformer<T, U, R>);
impl<T, U, R> BiTransformer<T, U, R> for ArcBiTransformer<T, U, R> {
fn apply(&self, first: T, second: U) -> R {
(self.function)(first, second)
}
impl_arc_conversions!(
ArcBiTransformer<T, U, R>,
BoxBiTransformer,
RcBiTransformer,
BoxBiTransformerOnce,
Fn(t: T, u: U) -> R
);
}
impl<F, T, U, R> BiTransformer<T, U, R> for F
where
F: Fn(T, U) -> R,
{
fn apply(&self, first: T, second: U) -> R {
self(first, second)
}
fn into_box(self) -> BoxBiTransformer<T, U, R>
where
Self: Sized + 'static,
{
BoxBiTransformer::new(self)
}
fn into_rc(self) -> RcBiTransformer<T, U, R>
where
Self: Sized + 'static,
{
RcBiTransformer::new(self)
}
fn into_arc(self) -> ArcBiTransformer<T, U, R>
where
Self: Sized + Send + Sync + 'static,
{
ArcBiTransformer::new(self)
}
fn into_fn(self) -> impl Fn(T, U) -> R
where
Self: Sized + 'static,
{
move |t: T, u: U| self(t, u)
}
fn to_fn(&self) -> impl Fn(T, U) -> R
where
Self: Sized + Clone + 'static,
{
self.clone()
}
}