bmw 0.3.0

Battery Manager for Wearable device for Rust.
Documentation
use std::io;
use std::sync::mpsc;

use mio::{Events, Interest, Poll, Token};

use crate::plugin::EventType;

pub fn poll(mut socket: udev::MonitorSocket, s: mpsc::Sender<EventType>) -> io::Result<()> {
    let mut poll = Poll::new()?;
    let mut events = Events::with_capacity(1024);

    poll.registry().register(
        &mut socket,
        Token(0),
        Interest::READABLE | Interest::WRITABLE,
    )?;

    loop {
        poll.poll(&mut events, None)?;

        for event in &events {
            if event.token() == Token(0) && event.is_writable() {
                for x in socket.clone() {
                    print_event(x);
                    s.send(EventType::UDev).unwrap();
                }
            }
        }
    }
}

fn print_event(event: udev::Event) {
    println!(
        "{}: {} {} (subsystem={}, sysname={}, devtype={})",
        event.sequence_number(),
        event.event_type(),
        event.syspath().to_str().unwrap_or("---"),
        event
            .subsystem()
            .map_or("", |s| { s.to_str().unwrap_or("") }),
        event.sysname().to_str().unwrap_or(""),
        event.devtype().map_or("", |s| { s.to_str().unwrap_or("") })
    );
}