redust 0.4.0

A simple Redis client for Rust.
Documentation
use lazy_static::lazy_static;

use redust::{script::Script, Connection, Result};

use crate::common::redis_url;

mod common;

lazy_static! {
	static ref TEST_SCRIPT: Script = Script::new(b"return 'Hello world!'");
	static ref TEST_SCRIPT_ARG: Script = Script::new(b"return 'Hello ' .. ARGV[1]");
	static ref TEST_SCRIPT_KEY: Script =
		Script::new(b"return 'Hello ' .. redis.call('GET', KEYS[1])");
}

#[tokio::test]
async fn load_and_exec() -> Result<()> {
	let mut conn = Connection::new(redis_url()).await?;

	let res = TEST_SCRIPT.exec(&mut conn).invoke().await?;
	assert_eq!(res, b"Hello world!");

	Ok(())
}

#[tokio::test]
async fn load_twice() -> Result<()> {
	let mut conn = Connection::new(redis_url()).await?;

	dbg!(TEST_SCRIPT.load(&mut conn).await?);
	assert!(TEST_SCRIPT.is_loaded());

	let res = TEST_SCRIPT.exec(&mut conn).invoke().await?;
	assert_eq!(res, b"Hello world!");

	Ok(())
}

#[tokio::test]
async fn exec_with_arg() -> Result<()> {
	let mut conn = Connection::new(redis_url()).await?;

	let res = TEST_SCRIPT_ARG
		.exec(&mut conn)
		.args(["world!"])
		.invoke()
		.await?;
	assert_eq!(res, b"Hello world!");

	Ok(())
}

#[tokio::test]
async fn exec_with_key() -> Result<()> {
	let mut conn = Connection::new(redis_url()).await?;

	conn.cmd(["set", "helloworld", "world!"]).await?;

	let res = TEST_SCRIPT_KEY
		.exec(&mut conn)
		.keys(["helloworld"])
		.invoke()
		.await?;
	assert_eq!(res, b"Hello world!");

	Ok(())
}