jsonrpc-core 2.0.7

Transport agnostic rust implementation of JSON-RPC 2.0 Specification.
Documentation
use serde::{Deserialize, Serialize};
use serde_json::value::{Value, Deserializer, Serializer};
use super::{Params, Error};

pub fn from_params<D>(params: Params) -> Result<D, Error> where D: Deserialize {
	let value = match params {
		Params::Array(vec) => Value::Array(vec),
		Params::Map(map) => Value::Object(map),
		Params::None =>  Value::Null
	};
	
	let mut deserializer = Deserializer::new(value);
	Deserialize::deserialize(&mut deserializer).map_err(|_| Error::invalid_params())
}

pub fn to_value<S>(s: &S) -> Result<Value, Error> where S: Serialize {
	let mut serializer = Serializer::new();
	match s.serialize(&mut serializer) {
		Err(_) => Err(Error::internal_error()),
		_ => Ok(serializer.unwrap())
	}
}