1use std::fs::File;
2use std::io;
3use {udev, I2c};
4
5pub struct Enumerator {
11 inner: udev::Devices,
12}
13
14impl Enumerator {
15 pub fn new() -> io::Result<Self> {
17 let udev = udev::Context::new()?;
18 let mut en = udev::Enumerator::new(&udev)?;
19 en.match_subsystem("i2c-dev")?;
20
21 Ok(Enumerator {
22 inner: en.scan_devices()?,
23 })
24 }
25}
26
27impl Iterator for Enumerator {
28 type Item = (I2c<File>, udev::Device);
29
30 fn next(&mut self) -> Option<Self::Item> {
31 while let Some(dev) = self.inner.next() {
32 let i2c = match dev.devnode() {
33 Some(devnode) => I2c::from_path(devnode),
34 None => continue,
35 };
36
37 if let Ok(i2c) = i2c {
38 return Some((i2c, dev))
39 }
40 }
41
42 None
43 }
44}