小编Phi*_*tor的帖子

将 redis-rs 与 actix-web 结合使用

我正在尝试将 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 项目之一,所以可能有一些东西我粗略地忽略了。

redis rust actix-web

3
推荐指数
1
解决办法
3831
查看次数

具有工作自动完成功能的“keyof”和“string”的联合类型

我想公开一个方法,该方法采用一些 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)

我尝试过的事情:

  1. 添加函数重载: function doAThing<T extends keyof Values>(name: string): void;- 将类型与 , 合并keyof Values,然后两者都变成字符串。没有自动完成功能。
  2. string使用: <T extends keyof Values | string>- 合并到 only使泛型类型成为并集string。也没有自动完成功能。

typescript typescript-typings union-types

2
推荐指数
1
解决办法
1050
查看次数