use std::ffi::CString; use anyhow::Result as AnyResult; use colpetto::Libinput; use futures_util::TryStreamExt; use rustix::{ fd::{FromRawFd, IntoRawFd, OwnedFd}, fs::{open, Mode, OFlags}, }; #[tokio::main] async fn main() -> AnyResult<()> { let libinput = Libinput::new( |path, flags| match open(path, OFlags::from_bits_retain(flags as u32), Mode::empty()) { Ok(fd) => fd.into_raw_fd(), Err(errno) => errno.raw_os_error(), }, |fd| drop(unsafe { OwnedFd::from_raw_fd(fd) }), )?; libinput.assign_seat(CString::new("seat0").unwrap().as_c_str())?; let mut stream = libinput.event_stream()?; while let Some(event) = stream.try_next().await? { dbg!(event); } Ok(()) }