1个不稳定版本

使用旧Rust 2015

0.1.0 2016年4月16日

#179#json-rpc

CC0 许可证

26KB
443

Build Status
文档

Rust JSONRPC 1.0 客户端

对发送JSONRPC 1.0请求和接收响应提供基本支持。

该库基于rust-jsonrpc

Serde支持

这包括一个宏,可以启用结构的序列化和反序列化,而无需使用稳定或夜间版本。它们可以按以下方式使用

#[macro_use] extern crate jsonrpc;
extern crate serde;

struct MyStruct {
    elem1: bool,
    elem2: String,
    elem3: Vec<usize>
}
serde_struct_impl!(MyStruct, elem1, elem2, elem3 <- "alternate name for elem3");

在编码时,如果存在备用名称,则字段将使用备用名称。否则使用普通名称。

还有一个变体用于表示可能具有几种可能形式的结构的枚举。例如

struct Variant1 {
    success: bool,
    success_message: String
}

struct Variant2 {
    success: bool,
    errors: Vec<String>
}

enum Reply {
    Good(Variant1),
    Bad(Variant2)
}
serde_struct_enum_impl!(Reply,
    Good, Variant1, success, success_message;
    Bad, Variant2, success, errors
);

注意,此宏通过返回第一个所有字段都存在的变体来工作。这意味着如果某个变体是另一个变体的超集,则较大的变体应首先提供给宏,以防止较小的变体总是被匹配。

JSONRPC

要发送请求以检索上述结构,请考虑以下示例代码

#[macro_use] extern crate jsonrpc;
extern crate serde;

struct MyStruct {
    elem1: bool,
    elem2: String,
    elem3: Vec<usize>
}

serde_struct_impl!(MyStruct, elem1, elem2, elem3);

fn main() {
    // The two Nones are for user/pass for authentication
    let mut client = jsonrpc::client::Client::new("example.org", None, None);
    let request = client.build_request("getmystruct", vec![]);
    match client.send_request(&request).and_then(|res| res.into_result::<MyStruct>()) {
        Ok(mystruct) => // Ok!
        Err(e) => // Not so much.
    }
}

依赖关系

~8.5MB
~158K SLoC