use std::time::Duration;
use net_lattice::{Capability, Error, Event, EventFilter, Lattice, Result};
fn main() -> Result<()> {
let lattice = Lattice::connect()?;
let filter = if lattice.supports(Capability::ROUTE_MONITORING) {
EventFilter::none().routes()
} else if lattice.supports(Capability::INTERFACE_MONITORING) {
EventFilter::none().interfaces()
} else if lattice.supports(Capability::ADDRESS_MONITORING) {
EventFilter::none().addresses()
} else if lattice.supports(Capability::NEIGHBOR_MONITORING) {
EventFilter::none().neighbors()
} else {
return Err(Error::Unsupported);
};
let events = lattice.watch_filtered(filter)?;
loop {
match events.recv_timeout(Duration::from_secs(30))? {
Some(Event::ResyncRequired { domain }) => {
println!("events were lost for {domain:?}; re-read that domain");
}
Some(event) => println!("event: {event:?}"),
None => println!("no event in the last 30 seconds"),
}
}
}