macro_rules! buffer_initial_methods {
() => {
fn buffer_initial(&self, initial_buffer: std::time::Duration) -> std::rc::Rc<dyn ferroui_system::IObservable<crate::cache::ChangeSet<T, K>>> {
self.buffer_initial_on(initial_buffer, ferroui_reactive::concurrency::SchedulerDefaults::time_based_operations())
}
fn buffer_initial_on(
&self,
initial_buffer: std::time::Duration,
scheduler: std::rc::Rc<dyn ferroui_reactive::concurrency::IScheduler>,
) -> std::rc::Rc<dyn ferroui_system::IObservable<crate::cache::ChangeSet<T, K>>> {
let deferred = crate::cache::internal::defer_until_loaded(self.change_sets());
ferroui_reactive::ObservableExt::publish_with(&deferred, move |shared: std::rc::Rc<dyn ferroui_system::IObservable<crate::cache::ChangeSet<T, K>>>| {
let initial = ferroui_reactive::ObservableExt::take(
&crate::cache::flatten_buffer_result(ferroui_reactive::ObservableExt::buffer_time_on(&shared, initial_buffer, scheduler.clone())),
1,
);
ferroui_reactive::ObservableExt::concat(&initial, shared)
})
}
};
}
pub(crate) use buffer_initial_methods;