1use core::marker::PhantomData;
2
3use crate::{Source, Value};
4
5pub struct Sequence<'l, S: ?Sized, V>
7where
8 S: Source + 'l,
9 V: Value + 'l,
10{
11 source: &'l mut S,
12 phantom: PhantomData<&'l V>,
13}
14
15impl<'l, S, V> From<&'l mut S> for Sequence<'l, S, V>
16where
17 S: Source,
18 V: Value,
19{
20 #[inline(always)]
21 fn from(source: &'l mut S) -> Self {
22 Sequence {
23 source,
24 phantom: PhantomData,
25 }
26 }
27}
28
29impl<'l, S, V> Iterator for Sequence<'l, S, V>
30where
31 S: Source,
32 V: Value,
33{
34 type Item = V;
35
36 #[inline(always)]
37 fn next(&mut self) -> Option<V> {
38 Some(self.source.read())
39 }
40}