use brk_traversable::Traversable;
use brk_types::Version;
use derive_more::{Deref, DerefMut};
use vecdb::UnaryTransform;
use crate::internal::{BpsType, PercentRollingWindows, Windows};
use super::LazyPercentPerBlock;
#[derive(Clone, Deref, DerefMut, Traversable)]
#[traversable(transparent)]
pub struct LazyPercentRollingWindows<B: BpsType>(pub Windows<LazyPercentPerBlock<B>>);
impl<B: BpsType> LazyPercentRollingWindows<B> {
pub(crate) fn from_rolling<F: UnaryTransform<B, B>>(
name: &str,
version: Version,
source: &PercentRollingWindows<B>,
) -> Self {
Self(source.0.map_with_suffix(|suffix, source_window| {
LazyPercentPerBlock::from_percent::<F>(
&format!("{name}_{suffix}"),
version,
source_window,
)
}))
}
}