use serde::de::DeserializeOwned; use serde_json::Value; use super::errors::RpcParseError; #[macro_export] macro_rules! parse_request { ($request_name:ty) => { impl RpcRequest for $request_name { fn parse(value: Option) -> Result { parse_params::(value) } } }; } pub trait RpcRequest: Sized { fn parse(value: Option) -> Result; } pub fn parse_params(value: Option) -> Result { value.map_or_else( || Err(RpcParseError("Require at least one parameter".to_owned())), |value| { serde_json::from_value(value) .map_err(|err| RpcParseError(format!("Failed parsing args: {err}"))) }, ) }