1 use rusb::{Context, Device, HotplugBuilder, UsbContext};
2 
3 struct HotPlugHandler;
4 
5 impl<T: UsbContext> rusb::Hotplug<T> for HotPlugHandler {
device_arrived(&mut self, device: Device<T>)6     fn device_arrived(&mut self, device: Device<T>) {
7         println!("device arrived {:?}", device);
8     }
9 
device_left(&mut self, device: Device<T>)10     fn device_left(&mut self, device: Device<T>) {
11         println!("device left {:?}", device);
12     }
13 }
14 
15 impl Drop for HotPlugHandler {
drop(&mut self)16     fn drop(&mut self) {
17         println!("HotPlugHandler dropped");
18     }
19 }
20 
main() -> rusb::Result<()>21 fn main() -> rusb::Result<()> {
22     if rusb::has_hotplug() {
23         let context = Context::new()?;
24 
25         let mut reg = Some(
26             HotplugBuilder::new()
27                 .enumerate(true)
28                 .register(&context, Box::new(HotPlugHandler {}))?,
29         );
30 
31         loop {
32             context.handle_events(None).unwrap();
33             if let Some(reg) = reg.take() {
34                 context.unregister_callback(reg);
35                 break;
36             }
37         }
38         Ok(())
39     } else {
40         eprint!("libusb hotplug api unsupported");
41         Ok(())
42     }
43 }
44