conreg/target.rs
1//! # Target Value Input
2//!
3//! Iterators that are intended as target input for controllers
4//!
5//! ## Constant Target Value
6//!
7//! ```rust
8//! use conreg::target::*;
9//!
10//! let mut target = TargetValue(0_isize);
11//! for _v in 0..2 { println!("Value is {:?}", target.next()); }
12//! target.set(1);
13//! for _v in 0..2 { println!("Value is {:?}", target.next()); }
14//! ```
15use core::iter::Iterator;
16pub struct TargetValue<T>(pub T);
17
18impl<T: Copy> TargetValue<T> {
19    pub fn set(&mut self, value: T) {
20        self.0 = value;
21    }
22}
23
24impl<T: Copy> Iterator for TargetValue<T> {
25    type Item = T;
26    /// The iterator never finished and returns zero
27    /// and never changes the value underneath
28    fn next(&mut self) -> Option<Self::Item> {
29        Some(self.0)
30    }
31}
32
33#[cfg(test)]
34mod tests {
35    use super::*;
36
37    #[test]
38    fn target_value_ok() {
39        let mut t = TargetValue(1_isize);
40        assert_eq!(t.next(), Some(1_isize));
41        t.set(2_isize);
42        assert_eq!(t.next(), Some(2_isize));
43    }
44}