Return Result<T, E> at RequestHandler

This commit is contained in:
moznion
2020-11-27 23:28:05 +09:00
parent ff94fd56db
commit df257747ae
2 changed files with 20 additions and 9 deletions
+4 -2
View File
@@ -1,7 +1,9 @@
use async_trait::async_trait;
use tokio::net::UdpSocket; use tokio::net::UdpSocket;
use crate::request::Request; use crate::request::Request;
pub trait RequestHandler: 'static + Sync + Send { #[async_trait]
fn handle_radius_request(&self, conn: &UdpSocket, request: &Request); pub trait RequestHandler<T, E>: 'static + Sync + Send {
async fn handle_radius_request(&self, conn: &UdpSocket, request: &Request) -> Result<T, E>;
} }
+14 -5
View File
@@ -11,11 +11,12 @@ use crate::packet::Packet;
use crate::request::Request; use crate::request::Request;
use crate::request_handler::RequestHandler; use crate::request_handler::RequestHandler;
use crate::secret_provider::SecretProvider; use crate::secret_provider::SecretProvider;
use std::fmt::Debug;
pub struct Server {} pub struct Server {}
impl Server { impl Server {
pub async fn run<T: RequestHandler, U: SecretProvider>( pub async fn run<X, E: Debug, T: RequestHandler<X, E>, U: SecretProvider>(
host: &str, host: &str,
port: u16, port: u16,
buf_size: usize, buf_size: usize,
@@ -35,7 +36,7 @@ impl Server {
} }
} }
async fn run_loop<T: RequestHandler, U: SecretProvider>( async fn run_loop<X, E: Debug, T: RequestHandler<X, E>, U: SecretProvider>(
host: &str, host: &str,
port: u16, port: u16,
buf_size: usize, buf_size: usize,
@@ -90,7 +91,7 @@ impl Server {
} }
} }
async fn process_request<T: RequestHandler, U: SecretProvider>( async fn process_request<X, E: Debug, T: RequestHandler<X, E>, U: SecretProvider>(
conn: Arc<UdpSocket>, conn: Arc<UdpSocket>,
request_data: &[u8], request_data: &[u8],
local_addr: SocketAddr, local_addr: SocketAddr,
@@ -147,10 +148,18 @@ impl Server {
undergoing_requests.insert(key); undergoing_requests.insert(key);
} }
request_handler.handle_radius_request( match request_handler
.handle_radius_request(
conn.borrow(), conn.borrow(),
&Request::new(local_addr, remote_addr, packet), &Request::new(local_addr, remote_addr, packet),
); )
.await
{
Ok(_) => {}
Err(e) => {
println!("{:?}", e);
}
}
let mut undergoing_requests = undergoing_requests_lock.write().unwrap(); let mut undergoing_requests = undergoing_requests_lock.write().unwrap();
undergoing_requests.remove(&key_for_remove); undergoing_requests.remove(&key_for_remove);