rust jsonrpc-core 从 add_method 解耦匿名函数
rust jsonrpc-core decouple anounymous function from add_method
我正在使用 jsonrpc-core 和 jsonrpc-http-server 编写带有 Rust 的 rpc 服务器。
这是我的代码:
let mut io = IoHandler::new();
io.add_method("validate_public_key", |params: Params| {
let map: HashMap<String, Value> = params.parse().unwrap();
println!("Params : {:?}", map);
let public_key = map.get("public_key").unwrap().as_str().unwrap();
println!("Public Key : {:?}", public_key);
Ok(Value::String(public_key.to_string()))
});
let server = ServerBuilder::new(io)
.start_http(&rpc_address.parse().unwrap())
.unwrap();
如何从 add_method 中删除匿名函数?我想在单独的文件中编写此方法并在此处将其用作 io.add_method("validate_public_key", |params: Params| validate);
这是我到目前为止尝试过的方法:
pub fn validate(params: Params) -> Result<Value> {
let map: Map<String, Value> = params.parse().unwrap();
println!("Params : {:?}", map);
let public_key = map.get("public_key").unwrap().as_str().unwrap();
println!("Public Key : {:?}", public_key);
Ok(Value::String(public_key.to_string()))
}
它给出以下错误:
error[E0277]: the trait bound `fn(jsonrpc_core::types::params::Params)
-> std::result::Result<serde_json::Value, jsonrpc_core::types::error::Error> {app::rpc::validate_public_key}:
futures::future::Future` is not satisfied --> src/main.rs:37:12
|
37 | io.add_method("validate_public_key", |params: Params| validate_public_key);
| ^^^^^^^^^^ the trait `futures::future::Future` is not implemented for `fn(jsonrpc_core::types::params::Params) -> std::result::Result<serde_json::Value, jsonrpc_core::types::error::Error {app::rpc::validate_public_key}`
|
= note: required because of the requirements on the impl of `jsonrpc_core::calls::RpcMethodSimple` for `[closure@src/main.rs:37:46: 37:82]`
我做错了什么?
我只是用 io.add_method("validate_public_key", validate);
而不是 io.add_method("validate_public_key", |params: Params| validate);
。它工作正常。
在评论区看到了解决办法,现在已经被用户删除了
我正在使用 jsonrpc-core 和 jsonrpc-http-server 编写带有 Rust 的 rpc 服务器。 这是我的代码:
let mut io = IoHandler::new();
io.add_method("validate_public_key", |params: Params| {
let map: HashMap<String, Value> = params.parse().unwrap();
println!("Params : {:?}", map);
let public_key = map.get("public_key").unwrap().as_str().unwrap();
println!("Public Key : {:?}", public_key);
Ok(Value::String(public_key.to_string()))
});
let server = ServerBuilder::new(io)
.start_http(&rpc_address.parse().unwrap())
.unwrap();
如何从 add_method 中删除匿名函数?我想在单独的文件中编写此方法并在此处将其用作 io.add_method("validate_public_key", |params: Params| validate);
这是我到目前为止尝试过的方法:
pub fn validate(params: Params) -> Result<Value> {
let map: Map<String, Value> = params.parse().unwrap();
println!("Params : {:?}", map);
let public_key = map.get("public_key").unwrap().as_str().unwrap();
println!("Public Key : {:?}", public_key);
Ok(Value::String(public_key.to_string()))
}
它给出以下错误:
error[E0277]: the trait bound `fn(jsonrpc_core::types::params::Params)
-> std::result::Result<serde_json::Value, jsonrpc_core::types::error::Error> {app::rpc::validate_public_key}:
futures::future::Future` is not satisfied --> src/main.rs:37:12
|
37 | io.add_method("validate_public_key", |params: Params| validate_public_key);
| ^^^^^^^^^^ the trait `futures::future::Future` is not implemented for `fn(jsonrpc_core::types::params::Params) -> std::result::Result<serde_json::Value, jsonrpc_core::types::error::Error {app::rpc::validate_public_key}`
|
= note: required because of the requirements on the impl of `jsonrpc_core::calls::RpcMethodSimple` for `[closure@src/main.rs:37:46: 37:82]`
我做错了什么?
我只是用 io.add_method("validate_public_key", validate);
而不是 io.add_method("validate_public_key", |params: Params| validate);
。它工作正常。
在评论区看到了解决办法,现在已经被用户删除了