1个不稳定版本
使用旧Rust 2015
0.1.0 | 2016年4月16日 |
---|
#179 在 #json-rpc
26KB
443 行
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