use super::{accumulate, AggregateChangeSets};
use ferroui_reactive::ObservableExt;
use ferroui_system::IObservable;
use std::rc::Rc;
pub(crate) fn count<T: 'static>(source: AggregateChangeSets<T>) -> Rc<dyn IObservable<usize>> {
accumulate(source, 0usize, |_: &T| 1usize, |current: usize, increment: usize| current + increment, |current: usize, increment: usize| current.saturating_sub(increment))
}
pub(crate) fn is_empty<T: 'static>(source: AggregateChangeSets<T>) -> Rc<dyn IObservable<bool>> {
count(source).start_with([0usize]).select(|count: usize| count == 0)
}
pub(crate) fn is_not_empty<T: 'static>(source: AggregateChangeSets<T>) -> Rc<dyn IObservable<bool>> {
count(source).start_with([0usize]).select(|count: usize| count > 0)
}