Implement Server::add_request_handler in terms of ::add_message_handler

This commit is contained in:
Antonio Scandurra 2022-02-14 09:31:31 +01:00
parent 1aff42302c
commit 68917c78be

View File

@ -121,36 +121,27 @@ impl Server {
Fut: 'static + Send + Future<Output = tide::Result<M::Response>>, Fut: 'static + Send + Future<Output = tide::Result<M::Response>>,
M: RequestMessage, M: RequestMessage,
{ {
let prev_handler = self.handlers.insert( self.add_message_handler(move |server, envelope| {
TypeId::of::<M>(), let receipt = envelope.receipt();
Box::new(move |server, envelope| { let response = (handler)(server.clone(), envelope);
let envelope = envelope.into_any().downcast::<TypedEnvelope<M>>().unwrap(); async move {
let receipt = envelope.receipt(); match response.await {
let response = (handler)(server.clone(), *envelope); Ok(response) => {
async move { server.peer.respond(receipt, response)?;
match response.await { Ok(())
Ok(response) => { }
server.peer.respond(receipt, response)?; Err(error) => {
Ok(()) server.peer.respond_with_error(
} receipt,
Err(error) => { proto::Error {
server.peer.respond_with_error( message: error.to_string(),
receipt, },
proto::Error { )?;
message: error.to_string(), Err(error)
},
)?;
Err(error)
}
} }
} }
.boxed() }
}), })
);
if prev_handler.is_some() {
panic!("registered a handler for the same message twice");
}
self
} }
pub fn handle_connection( pub fn handle_connection(