diff --git a/src/lib.rs b/src/lib.rs index 88372a4..29c3be0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -87,6 +87,7 @@ pub mod uinput; mod tokio_stream; use std::fmt; +use std::path::PathBuf; use std::time::{Duration, SystemTime}; // pub use crate::constants::FFEffect::*; @@ -249,9 +250,9 @@ pub struct EnumerateDevices { inner: raw_stream::EnumerateDevices, } impl Iterator for EnumerateDevices { - type Item = Device; - fn next(&mut self) -> Option { - self.inner.next().map(Device::from_raw_device) + type Item = (PathBuf, Device); + fn next(&mut self) -> Option<(PathBuf, Device)> { + self.inner.next().map(|(pb, dev)| (pb, Device::from_raw_device(dev))) } } diff --git a/src/raw_stream.rs b/src/raw_stream.rs index d6c5a71..e34fc51 100644 --- a/src/raw_stream.rs +++ b/src/raw_stream.rs @@ -2,7 +2,7 @@ use std::fs::{File, OpenOptions}; use std::io::Write; use std::mem::MaybeUninit; use std::os::unix::io::{AsRawFd, RawFd}; -use std::path::Path; +use std::path::{Path, PathBuf}; use std::{io, mem}; use crate::constants::*; @@ -656,8 +656,8 @@ pub struct EnumerateDevices { readdir: Option, } impl Iterator for EnumerateDevices { - type Item = RawDevice; - fn next(&mut self) -> Option { + type Item = (PathBuf, RawDevice); + fn next(&mut self) -> Option<(PathBuf, RawDevice)> { use std::os::unix::ffi::OsStrExt; let readdir = self.readdir.as_mut()?; loop { @@ -666,7 +666,7 @@ impl Iterator for EnumerateDevices { let fname = path.file_name().unwrap(); if fname.as_bytes().starts_with(b"event") { if let Ok(dev) = RawDevice::open(&path) { - return Some(dev); + return Some((path, dev)); } } }