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);。它工作正常。

在评论区看到了解决办法,现在已经被用户删除了