mirror of
https://github.com/logos-blockchain/lssa.git
synced 2026-01-06 23:33:10 +00:00
28 lines
800 B
Rust
28 lines
800 B
Rust
use serde::de::DeserializeOwned;
|
|
use serde_json::Value;
|
|
|
|
use super::errors::RpcParseError;
|
|
|
|
pub trait RpcRequest: Sized {
|
|
fn parse(value: Option<Value>) -> Result<Self, RpcParseError>;
|
|
}
|
|
|
|
pub fn parse_params<T: DeserializeOwned>(value: Option<Value>) -> Result<T, RpcParseError> {
|
|
if let Some(value) = value {
|
|
serde_json::from_value(value)
|
|
.map_err(|err| RpcParseError(format!("Failed parsing args: {err}")))
|
|
} else {
|
|
Err(RpcParseError("Require at least one parameter".to_owned()))
|
|
}
|
|
}
|
|
#[macro_export]
|
|
macro_rules! parse_request {
|
|
($request_name:ty) => {
|
|
impl RpcRequest for $request_name {
|
|
fn parse(value: Option<Value>) -> Result<Self, RpcParseError> {
|
|
parse_params::<Self>(value)
|
|
}
|
|
}
|
|
};
|
|
}
|