1use std::ops::{Index, Range};
2
3pub trait MMItem: Sync + Send + 'static {}
4impl<T: Sync + Send + 'static> MMItem for T {}
5
6pub trait Selection: Send + PartialEq +'static {}
7impl<T: Send + PartialEq + 'static> Selection for T {}
8
9pub trait SegmentableItem: MMItem + Index<Range<usize>, Output = str> {}
10impl<T: MMItem + Index<Range<usize>, Output = str>> SegmentableItem for T {}
11
12pub type RenderFn<T> = Box<dyn for<'a> Fn(&'a T, &'a str) -> String + Send + Sync>;
17pub type SplitterFn<T> = std::sync::Arc<dyn for<'a> Fn(&'a T) -> Vec<(usize, usize)> + Send + Sync>;