use crate::rpc::errors::RpcError;
use serde_json::Value;
#[inline]
pub fn param_str(params: &Value, index: usize) -> Option<&str> {
params.get(index).and_then(|p| p.as_str())
}
pub fn param_str_required(
params: &Value,
index: usize,
method_name: &str,
) -> Result<String, RpcError> {
param_str(params, index).map(String::from).ok_or_else(|| {
RpcError::invalid_params(format!(
"Expected string at params[{index}] for {method_name}"
))
})
}
#[inline]
pub fn param_u64(params: &Value, index: usize) -> Option<u64> {
params.get(index).and_then(|p| p.as_u64())
}
#[inline]
pub fn param_u64_default(params: &Value, index: usize, default: u64) -> u64 {
param_u64(params, index).unwrap_or(default)
}
pub fn param_u64_required(
params: &Value,
index: usize,
method_name: &str,
) -> Result<u64, RpcError> {
param_u64(params, index).ok_or_else(|| {
RpcError::invalid_params(format!(
"Expected non-negative integer at params[{index}] for {method_name}"
))
})
}
#[inline]
pub fn param_bool(params: &Value, index: usize) -> Option<bool> {
params.get(index).and_then(|p| p.as_bool())
}
#[inline]
pub fn param_bool_default(params: &Value, index: usize, default: bool) -> bool {
param_bool(params, index).unwrap_or(default)
}
#[inline]
pub fn param_f64(params: &Value, index: usize) -> Option<f64> {
params.get(index).and_then(|p| p.as_f64())
}
#[inline]
pub fn param_array(params: &Value, index: usize) -> Option<&Vec<Value>> {
params.get(index).and_then(|p| p.as_array())
}