use crate::{Route, RouteChange, RouteListener, RouteManager};
use std::io;
pub struct AsyncRouteListener {
route_listener: RouteListener,
}
impl AsyncRouteListener {
pub fn new() -> io::Result<Self> {
Ok(Self {
route_listener: RouteListener::new()?,
})
}
pub async fn listen(&mut self) -> io::Result<RouteChange> {
self.route_listener
.receiver
.recv_async()
.await
.map_err(|_| io::Error::new(io::ErrorKind::Interrupted, "shutdown"))
}
}
pub struct AsyncRouteManager {
_private: std::marker::PhantomData<()>,
}
impl AsyncRouteManager {
pub fn new() -> io::Result<Self> {
Ok(Self {
_private: std::marker::PhantomData,
})
}
pub fn listener() -> io::Result<AsyncRouteListener> {
AsyncRouteListener::new()
}
pub async fn list(&mut self) -> io::Result<Vec<Route>> {
RouteManager::new()?.list()
}
pub async fn add(&mut self, route: &Route) -> io::Result<()> {
RouteManager::new()?.add(route)
}
pub async fn delete(&mut self, route: &Route) -> io::Result<()> {
RouteManager::new()?.delete(route)
}
}