将openssl::rsa::rsa作为参数传递时,类型参数的数目错误

将openssl::rsa::rsa作为参数传递时,类型参数的数目错误,openssl,rust,rsa,Openssl,Rust,Rsa,当我尝试将参数传递给函数时,出现以下错误 错误[E0243]:类型参数的数量错误:应为1,找到0 ->src/main.rs:42:24 | 42 | fn异步加密Rsa:&Rsa,普通:&str->String{ |^^^应为1个类型参数 我相信这是因为我正在定义一个类型,但我不知道openssl::rsa::rsa除了自身之外是什么类型 extern crate openssl; use openssl::rsa::Rsa; fn main() { let plain = Stri

当我尝试将参数传递给函数时,出现以下错误

错误[E0243]:类型参数的数量错误:应为1,找到0 ->src/main.rs:42:24 | 42 | fn异步加密Rsa:&Rsa,普通:&str->String{ |^^^应为1个类型参数 我相信这是因为我正在定义一个类型,但我不知道openssl::rsa::rsa除了自身之外是什么类型

extern crate openssl;
use openssl::rsa::Rsa;

fn main() {
    let plain = String::from("Well hello");
    let rsa = Rsa::generate(4096).unwrap();
    let cipher = async_encrypt(&rsa, &plain);
}

fn async_encrypt(rsa: &Rsa, plain: &str) -> String {
    //  Do some stuff
}
这里发生了什么?

需要一个参数类型T,它应该是或。反过来,这些类型是标识密钥类型的标记

由于静态方法生成私钥,您可能需要以下签名:

use openssl::pkey::Private;

fn async_encrypt(rsa: &Rsa<Private>, plain: &str) -> String {
    // ...
}

您读过openssl的文档吗?包含一个参数类型T,它必须是公共的或私有的。@E_net4是的,就是这样做的,谁知道文档会这么有用
fn async_encrypt<T>(rsa: &Rsa<T>, plain: &str) -> String {
    // ...
}