use crate::macros::{
impl_box_once_conversions,
impl_closure_once_trait,
};
use crate::predicates::predicate::{
BoxPredicate,
Predicate,
};
use crate::transformers::macros::{
impl_box_conditional_transformer,
impl_box_transformer_methods,
impl_conditional_transformer_debug_display,
impl_transformer_common_methods,
impl_transformer_constant_method,
impl_transformer_debug_display,
};
mod box_transformer_once;
pub use box_transformer_once::BoxTransformerOnce;
mod fn_transformer_once_ops;
pub use fn_transformer_once_ops::FnTransformerOnceOps;
mod unary_operator_once;
pub use unary_operator_once::UnaryOperatorOnce;
mod box_unary_operator_once;
pub use box_unary_operator_once::BoxUnaryOperatorOnce;
mod box_conditional_transformer_once;
pub use box_conditional_transformer_once::BoxConditionalTransformerOnce;
pub trait TransformerOnce<T, R> {
fn apply(self, input: T) -> R;
fn into_box(self) -> BoxTransformerOnce<T, R>
where
Self: Sized + 'static,
{
BoxTransformerOnce::new(move |input: T| self.apply(input))
}
fn into_fn(self) -> impl FnOnce(T) -> R
where
Self: Sized + 'static,
{
move |input: T| self.apply(input)
}
fn to_box(&self) -> BoxTransformerOnce<T, R>
where
Self: Clone + 'static,
{
self.clone().into_box()
}
fn to_fn(&self) -> impl FnOnce(T) -> R
where
Self: Clone + 'static,
{
self.clone().into_fn()
}
}