tiny-jsonrpc 0.7.0

Json rpc lib based on reqwest
Documentation
use serde::{Deserialize, Serialize};
use serde_json::Value as JsonValue;

use crate::error::Error;

#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(untagged)]
pub enum Params {
    None,
    Array(Vec<JsonValue>),
    Map(serde_json::Map<String, JsonValue>),
}

impl Params {
    pub fn parse<D: serde::de::DeserializeOwned>(self) -> Result<D, Error> {
        let value: JsonValue = self.into();
        serde_json::from_value(value).map_err(Error::InvalidParams)
    }

    pub fn to_value(&self) -> JsonValue {
        match self {
            Params::None => JsonValue::Null,
            Params::Array(a) => JsonValue::Array(a.clone()),
            Params::Map(a) => JsonValue::Object(a.clone()),
        }
    }
}

impl From<Params> for JsonValue {
    fn from(params: Params) -> Self {
        match params {
            Params::None => JsonValue::Null,
            Params::Array(vec) => JsonValue::Array(vec),
            Params::Map(map) => JsonValue::Object(map),
        }
    }
}