ferroui_dynamic_data/list/ops/
flatten_buffer_result.rs1use crate::list::{ChangeSet, IChangeSet};
5use ferroui_reactive::ObservableExt;
6use ferroui_system::IObservable;
7use std::rc::Rc;
8
9pub fn flatten_buffer_result<T: Clone + 'static, C: IChangeSet<T>>(source: Rc<dyn IObservable<Vec<C>>>) -> Rc<dyn IObservable<ChangeSet<T>>> {
12 source
13 .where_(|buffer: &Vec<C>| !buffer.is_empty())
14 .select(|updates: Vec<C>| updates.iter().flat_map(|update| update.change_set().iter().cloned()).collect::<ChangeSet<T>>())
15}
16
17pub trait FlattenBufferResultListEx<T> {
19 fn flatten_buffer_result(&self) -> Rc<dyn IObservable<ChangeSet<T>>>;
21}
22
23impl<T: Clone + 'static, C: IChangeSet<T>> FlattenBufferResultListEx<T> for Rc<dyn IObservable<Vec<C>>> {
24 fn flatten_buffer_result(&self) -> Rc<dyn IObservable<ChangeSet<T>>> {
25 flatten_buffer_result(self.clone())
26 }
27}