1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
use super::ResponseInfo; use std::net::SocketAddr; use xml_rpc::{self, rouille, Value}; use super::{Response, ResponseError}; pub struct Server { server: xml_rpc::Server, } impl Default for Server { fn default() -> Self { let mut server = xml_rpc::Server::default(); server.set_on_missing(on_missing); Server { server } } } impl Server { #[inline] pub fn register_value<T>(&mut self, name: impl Into<String>, msg: &'static str, handler: T) where T: Fn(xml_rpc::Params) -> Response<Value> + Send + Sync + 'static, { self.server.register_value(name, move |args| { let response = handler(args); let response_info = ResponseInfo::from_response(response, msg); response_info.into() }) } #[inline] pub fn bind( self, uri: &SocketAddr, ) -> xml_rpc::error::Result< xml_rpc::server::BoundServer< impl Fn(&rouille::Request) -> rouille::Response + Send + Sync + 'static, >, > { self.server.bind(uri) } } #[allow(clippy::needless_pass_by_value)] #[inline] fn on_missing(_params: xml_rpc::Params) -> xml_rpc::Response { let error_message = ResponseError::Client("Bad method requested".into()); let info = ResponseInfo::from_response_error(error_message); info.into() }