use super::Count;
pub trait ProvidesCount {
fn provide_count(&self) -> Count;
}
impl ProvidesCount for Count {
fn provide_count(&self) -> Count {
*self
}
}
impl<TProvidesCount> ProvidesCount for Box<TProvidesCount>
where
TProvidesCount: ProvidesCount,
{
fn provide_count(&self) -> Count {
(**self).provide_count()
}
}
struct CountProvider<TFunc>
where
TFunc: Fn() -> Count,
{
func: TFunc,
}
impl<TFunc> ProvidesCount for CountProvider<TFunc>
where
TFunc: Fn() -> Count,
{
fn provide_count(&self) -> Count {
(self.func)()
}
}
#[allow(dead_code)]
fn count_provider<TFunc: Fn() -> Count>(t_func: TFunc) -> CountProvider<TFunc> {
CountProvider { func: t_func }
}