#![allow(unused_imports)]
use super::*;
pub struct ArcStatefulTransformer<T, R> {
pub(super) function: Arc<Mutex<dyn FnMut(T) -> R + Send>>,
pub(super) name: Option<String>,
}
impl<T, R> ArcStatefulTransformer<T, R> {
impl_transformer_common_methods!(
ArcStatefulTransformer<T, R>,
(FnMut(T) -> R + Send + 'static),
|f| Arc::new(Mutex::new(f))
);
impl_shared_transformer_methods!(
ArcStatefulTransformer<T, R>,
ArcConditionalStatefulTransformer,
into_arc,
StatefulTransformer,
Send + Sync + 'static
);
}
impl_transformer_constant_method!(stateful thread_safe ArcStatefulTransformer<T, R>);
impl_transformer_debug_display!(ArcStatefulTransformer<T, R>);
impl_transformer_clone!(ArcStatefulTransformer<T, R>);
impl<T, R> StatefulTransformer<T, R> for ArcStatefulTransformer<T, R> {
fn apply(&mut self, input: T) -> R {
let mut func = self.function.lock();
func(input)
}
impl_arc_conversions!(
ArcStatefulTransformer<T, R>,
BoxStatefulTransformer,
RcStatefulTransformer,
BoxTransformerOnce,
FnMut(t: T) -> R
);
}
impl_closure_trait!(
StatefulTransformer<T, R>,
apply,
BoxTransformerOnce,
FnMut(input: T) -> R
);