efibootnext/
load_option_iter.rs1use crate::error::GetLoadOptionError;
4use crate::Adapter;
5use crate::LoadOption;
6use std::iter::Iterator;
7
8pub struct LoadOptionIter<'a, I>
10where
11 I: Iterator<Item = u16>,
12{
13 adapter: &'a Adapter,
15 number_iter: I,
17}
18
19impl<'a, I> Iterator for LoadOptionIter<'a, I>
20where
21 I: Iterator<Item = u16>,
22{
23 type Item = Result<LoadOption, GetLoadOptionError>;
24
25 fn next(&mut self) -> Option<Self::Item> {
26 loop {
27 let number = match self.number_iter.next() {
28 None => return None,
29 Some(number) => number,
30 };
31 match self.adapter.get_load_option(number) {
32 Ok(Some(load_option)) => return Some(Ok(load_option)),
33 Ok(None) => continue, Err(err) => return Some(Err(err)),
35 };
36 }
37 }
38}
39
40impl<'a, I> LoadOptionIter<'a, I>
41where
42 I: Iterator<Item = u16>,
43{
44 pub fn with_number_iter(adapter: &'a Adapter, number_iter: I) -> Self {
46 Self {
47 adapter,
48 number_iter,
49 }
50 }
51}