use crate::functions::macros::{
impl_box_conditional_function,
impl_box_function_methods,
impl_conditional_function_debug_display,
impl_fn_ops_trait,
impl_function_common_methods,
impl_function_constant_method,
impl_function_debug_display,
impl_function_identity_method,
};
use crate::macros::{
impl_box_once_conversions,
impl_closure_once_trait,
};
use crate::predicates::predicate::{
BoxPredicate,
Predicate,
};
mod box_function_once;
pub use box_function_once::BoxFunctionOnce;
mod box_conditional_function_once;
pub use box_conditional_function_once::BoxConditionalFunctionOnce;
mod fn_function_once_ops;
pub use fn_function_once_ops::FnFunctionOnceOps;
pub trait FunctionOnce<T, R> {
fn apply(self, t: &T) -> R;
fn into_box(self) -> BoxFunctionOnce<T, R>
where
Self: Sized + 'static,
{
BoxFunctionOnce::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) -> BoxFunctionOnce<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()
}
}