Skip to content

Commit

Permalink
feat: improve invalid params error
Browse files Browse the repository at this point in the history
when there are optional parameters
  • Loading branch information
blckngm committed Nov 30, 2023
1 parent 40c830d commit 820f7f8
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 7 deletions.
6 changes: 3 additions & 3 deletions examples/server-macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ use jsonrpc_utils::{
trait MyRpc {
async fn sleep(&self, x: u64) -> Result<u64>;
async fn value(&self, x: Option<u64>) -> Result<u64>;
async fn add(&self, (x, y): (i32, i32), z: i32) -> Result<i32>;
async fn add(&self, (x, y): (i32, i32), z: Option<i32>) -> Result<i32>;
#[rpc(name = "@ping")]
fn ping(&self) -> Result<String>;

Expand All @@ -37,8 +37,8 @@ impl MyRpc for RpcImpl {
Ok(x.unwrap_or_default())
}

async fn add(&self, (x, y): (i32, i32), z: i32) -> Result<i32> {
Ok(x + y + z)
async fn add(&self, (x, y): (i32, i32), z: Option<i32>) -> Result<i32> {
Ok(x + y + z.unwrap_or_default())
}

fn ping(&self) -> Result<String> {
Expand Down
10 changes: 6 additions & 4 deletions jsonrpc-utils-macros/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -330,24 +330,26 @@ fn add_method(m: &mut TraitItemFn) -> Result<proc_macro2::TokenStream> {
let mut arr = match params {
jsonrpc_utils::jsonrpc_core::Params::Array(arr) => arr.into_iter(),
jsonrpc_utils::jsonrpc_core::Params::None => Vec::new().into_iter(),
_ => return Err(jsonrpc_utils::jsonrpc_core::Error::invalid_params("")),
_ => return Err(jsonrpc_utils::jsonrpc_core::Error::invalid_params("Invalid params: invalid type map, expect an array or null")),
};
};
for i in 0..required_params {
let p = &params_names[i];
let p_str = LitStr::new(&p.to_string(), p.span());
let ty = params_tys[i];
parse_params.extend(quote! {
let #p: #ty = jsonrpc_utils::serde_json::from_value(arr.next().ok_or_else(|| jsonrpc_utils::jsonrpc_core::Error::invalid_params(""))?).map_err(|_|
jsonrpc_utils::jsonrpc_core::Error::invalid_params("")
let #p: #ty = jsonrpc_utils::serde_json::from_value(arr.next().ok_or_else(|| jsonrpc_utils::jsonrpc_core::Error::invalid_params(format!("Missing required parameter `{}`", #p_str)))?).map_err(|e|
jsonrpc_utils::jsonrpc_core::Error::invalid_params(format!("Invalid parameter for `{}`: {}", #p_str, e))
)?;
});
}
for i in required_params..params_names.len() {
let p = &params_names[i];
let p_str = LitStr::new(&p.to_string(), p.span());
let ty = params_tys[i];
parse_params.extend(quote! {
let #p: #ty = match arr.next() {
Some(v) => jsonrpc_utils::serde_json::from_value(v).map_err(|_| jsonrpc_utils::jsonrpc_core::Error::invalid_params(""))?,
Some(v) => jsonrpc_utils::serde_json::from_value(v).map_err(|e| jsonrpc_utils::jsonrpc_core::Error::invalid_params(format!("Invalid parameter for `{}`: {}", #p_str, e)))?,
None => None,
};
});
Expand Down

0 comments on commit 820f7f8

Please sign in to comment.