midi_toolkit/sequence/common/
unwrap_items.rs

1use std::fmt::Debug;
2
3/// Unwraps each item `Result<T, E>` into T, panicking if an error is reached
4pub fn unwrap_items<T: Debug, E: Debug, I: Iterator<Item = Result<T, E>> + Sized>(
5    iter: I,
6) -> impl Iterator<Item = T> {
7    iter.map(|v| v.unwrap())
8}
9
10#[cfg(test)]
11mod tests {
12    use crate::{
13        events::Event,
14        pipe,
15        sequence::{to_vec, unwrap_items},
16    };
17
18    #[test]
19    #[should_panic]
20    fn panic() {
21        let events = vec![
22            Ok(Event::new_delta_note_on_event(100.0f64, 0, 64, 127)),
23            Ok(Event::new_delta_note_off_event(50.0f64, 0, 64)),
24            Err(()),
25        ];
26
27        pipe! {
28            events.into_iter()
29            |>unwrap_items()
30            |>to_vec()
31        };
32    }
33
34    #[test]
35    fn no_panic() {
36        let events: Vec<Result<_, ()>> = vec![
37            Ok(Event::new_delta_note_on_event(100.0f64, 0, 64, 127)),
38            Ok(Event::new_delta_note_off_event(50.0f64, 0, 64)),
39        ];
40
41        let changed = pipe! {
42            events.into_iter()
43            |>unwrap_items()
44            |>to_vec()
45        };
46
47        assert_eq!(
48            changed,
49            vec![
50                Event::new_delta_note_on_event(100.0f64, 0, 64, 127),
51                Event::new_delta_note_off_event(50.0f64, 0, 64),
52            ]
53        )
54    }
55}