我正在尝试将 redis 作为web::Data上下文添加到我的 actix-web rust 应用程序中:
extern crate redis;
// std imports
use std::net::SocketAddr;
// external imports
use actix_web::{App, HttpServer};
use redis::Client
#[actix_rt::main]
async fn main() -> std::io::Result<()> {
// connect to redis
let redis_con = Client::open("redis://127.0.0.1:6379")
.unwrap()
.get_connection()
.unwrap();
HttpServer::new(move || App::new().data(redis_con).service(api::get_healthz))
.bind(SocketAddr::new(IpAddr::V4(Ipv4Addr::new(0, 0, 0, 0)), 8080)?
.run()
.await
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
the trait bound 'redis::Connection: std::clone::Clone' is not satisfied in '[closure@src/main.rs:48:21: 48:81 redis_con:redis::Connection]'
我已经尝试将其包装为,这对于子模块深处未实现的Arc<redis::Connection>某些类型也不起作用。redis::ConnectionSync
在这种情况下我没有看到 Rust 的概念吗?这是我第一个真正的 Rust 项目之一,所以可能有一些东西我粗略地忽略了。
我想公开一个方法,该方法采用一些 Union 类型作为参数,并为此提供自动完成功能。由于此联合类型可以通过声明合并进行扩展,因此自动完成是这里的一个关键功能。
但是,如果用户在使用我的库时不使用 TypeScript,或者不想在声明中添加特定类型,则它应该接受string联合类型的替代类型。
简而言之:我想要联合类型的自动补全,但也允许任何不匹配的字符串。
仅包含联合类型的示例:
export interface Values {
'variant-a': undefined,
'variant-b': undefined,
'variant-c': undefined,
}
function doAThing<T extends keyof Values>(name: T): void {
console.log(name);
}
Run Code Online (Sandbox Code Playgroud)
我尝试过的事情:
function doAThing<T extends keyof Values>(name: string): void;- 将类型与 , 合并keyof Values,然后两者都变成字符串。没有自动完成功能。string使用: <T extends keyof Values | string>- 合并到 only使泛型类型成为并集string。也没有自动完成功能。