glow_effects/util/
effect.rs1use crate::util::color::ColorContainer;
2use crate::util::color_point::ColorPointContainer;
3
4pub trait Effect<U: ColorContainer, T: ColorPointContainer<U>> {
5 fn get_frame(&mut self) -> Vec<T>;
6
7 fn iter(&mut self) -> EffectIterator<U, T, Self> {
8 EffectIterator {
9 effect: self,
10 phantom_color_value: std::marker::PhantomData,
11 phantom_color_point: std::marker::PhantomData,
12 }
13 }
14}
15
16pub struct EffectIterator<
17 'a,
18 U: ColorContainer,
19 T: ColorPointContainer<U>,
20 E: Effect<U, T> + ?Sized,
21> {
22 effect: &'a mut E,
23 phantom_color_value: std::marker::PhantomData<U>,
24 phantom_color_point: std::marker::PhantomData<T>,
25}
26
27impl<'a, U: ColorContainer, T: ColorPointContainer<U>, E: Effect<U, T> + ?Sized> Iterator
28 for EffectIterator<'a, U, T, E>
29{
30 type Item = Vec<T>;
31
32 fn next(&mut self) -> Option<Self::Item> {
33 Some(self.effect.get_frame())
34 }
35}