I am trying to add redis as a web::Data
context to my actix-web rust application:
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
}
I'm getting the following error:
the trait bound 'redis::Connection: std::clone::Clone' is not satisfied in '[closure@src/main.rs:48:21: 48:81 redis_con:redis::Connection]'
I already tried to wrap it as an Arc<redis::Connection>
, which also did not work for some type deep inside the sub-modules of redis::Connection
which did not implement Sync
.
Is there a concept of Rust I am not seeing in this context? This is one of my first real Rust projects, so there could be something I very roughly overlooked.