use crate::types::{Alias, DynIden, IntoIden};
#[derive(Debug, Clone)]
pub struct RedisKey(pub(crate) DynIden);
impl RedisKey {
pub fn to_bytes(&self) -> Vec<u8> {
let mut s = String::new();
self.0.unquoted(&mut s);
s.into_bytes()
}
}
pub trait IntoRedisKey {
fn into_redis_key(self) -> RedisKey;
}
impl IntoRedisKey for &str {
fn into_redis_key(self) -> RedisKey {
RedisKey(Alias::new(self).into_iden())
}
}
impl IntoRedisKey for String {
fn into_redis_key(self) -> RedisKey {
RedisKey(Alias::new(self).into_iden())
}
}
impl IntoRedisKey for DynIden {
fn into_redis_key(self) -> RedisKey {
RedisKey(self)
}
}
impl IntoRedisKey for RedisKey {
fn into_redis_key(self) -> RedisKey {
self
}
}
#[cfg(test)]
mod tests {
use super::*;
use rstest::*;
#[rstest]
fn test_key_from_str() {
let key = "session:123".into_redis_key();
assert_eq!(key.to_bytes(), b"session:123");
}
#[rstest]
fn test_key_from_string() {
let key = String::from("user:456").into_redis_key();
assert_eq!(key.to_bytes(), b"user:456");
}
#[rstest]
fn test_redis_key_passthrough() {
let original = "mykey".into_redis_key();
let passthrough = original.into_redis_key();
assert_eq!(passthrough.to_bytes(), b"mykey");
}
}