use darkredis::{Connection, MSetBuilder};
use futures::StreamExt;
#[cfg_attr(feature = "runtime_tokio", tokio::main)]
#[cfg_attr(feature = "runtime_async_std", async_std::main)]
async fn main() {
let mut connection = Connection::connect("127.0.0.1:6379").await.unwrap();
let key = "usernames";
connection.sadd(&key, "john123").await.unwrap();
connection.sadd(&key, "jane123").await.unwrap();
connection.sadd(&key, "bob").await.unwrap();
connection.sadd(&key, "bill").await.unwrap();
connection.sadd(&key, "james123").await.unwrap();
let users = connection
.sscan(&key)
.pattern(b"*123")
.run()
.collect::<Vec<Vec<u8>>>()
.await;
println!("Got {} results!", users.len());
for (i, u) in users.into_iter().enumerate() {
println!("Result {}: {}", i, String::from_utf8_lossy(&u));
}
let sets = connection.scan().run().collect::<Vec<Vec<u8>>>().await;
println!("There are {} keys in the database!", sets.len());
let hash_key = "hash";
let builder = MSetBuilder::new()
.set(b"field1", b"foo")
.set(b"field2", b"bar");
connection.hset_many(&hash_key, builder).await.unwrap();
let fields = connection
.hscan(&hash_key)
.run()
.map(|(f, v)| (String::from_utf8(f).unwrap(), String::from_utf8(v).unwrap()))
.collect::<Vec<(String, String)>>()
.await;
for (field, value) in fields {
println!("Field {} is {}", field, value);
}
}