#![allow(clippy::disallowed_names)]
#![allow(clippy::let_underscore_future)]
use fred::prelude::*;
use std::time::Duration;
#[tokio::main]
async fn main() -> Result<(), Error> {
let config = Config::from_url("redis://username:password@foo.com:6379/1")?;
let client = Builder::from_config(config)
.with_connection_config(|config| {
config.connection_timeout = Duration::from_secs(5);
config.tcp = TcpConfig {
nodelay: Some(true),
..Default::default()
};
})
.build()?;
client.init().await?;
let _connection_task = client.init().await?;
client.on_error(|(error, server)| async move {
println!("{:?}: Connection error: {:?}", server, error);
Ok(())
});
client.on_reconnect(|server| async move {
println!("Reconnected to {}", server);
Ok(())
});
let foo: Option<String> = client.get("foo").await?;
println!("Foo: {:?}", foo);
let _: () = client
.set("foo", "bar", Some(Expiration::EX(1)), Some(SetOptions::NX), false)
.await?;
println!("Foo: {:?}", client.get::<Option<String>, _>("foo").await?);
client.quit().await?;
Ok(())
}