winroute 0.2.1

This crate is a utilities of high level of interface for manipulating and observing Windows's routing table
Documentation
# WinRoute

This crate is a utilities of high level of interface for manipulating
and observing Windows's routing table

# Examples

## Manage routing table

```rust
let manager = RouteManager::new()?;
let new_route = Route::new("223.6.6.6".parse().unwrap(), 32).metric(1);
// add route
if let Err(e) = manager.add_route(&new_route) {
    eprintln!("{e}");
}
// delete route
if let Err(e) = manager.delete_route(&new_route) {
    eprintln!("{e}");
}
```

## Listen a table change event

```rust
let manager = RouteManager::new()?;
let recvier = manager.subscribe_route_change();
let ma = Arc::new(manager);
let mb = ma.clone();

// start a thread to driven event loop, also can use async task to run this
std::thread::spawn(move || loop {
    ma.poll().unwrap();
});

// create a new route
let new_route = Route::new("223.6.6.6".parse().unwrap(), 32);
// add route to system
mb.add_route(&new_route)?;

loop {
    // listeing on route change event
    let event = recvier.recv().unwrap();
    println!("{:?}", event);
}
```

# Features

* `serializable`: This feature is enabled by default, it implemented `serde`'s `Serialize` and `Deserialize`, this feature requires an additional dependency on `serde`