pub trait CacheKey: Send + Sync {
fn to_key_string(&self) -> String;
}
impl CacheKey for String {
fn to_key_string(&self) -> String {
self.clone()
}
}
impl CacheKey for &str {
fn to_key_string(&self) -> String {
(*self).to_string()
}
}
impl CacheKey for u64 {
fn to_key_string(&self) -> String {
self.to_string()
}
}
impl CacheKey for u128 {
fn to_key_string(&self) -> String {
self.to_string()
}
}
impl CacheKey for i64 {
fn to_key_string(&self) -> String {
self.to_string()
}
}
impl CacheKey for i32 {
fn to_key_string(&self) -> String {
self.to_string()
}
}
impl CacheKey for u32 {
fn to_key_string(&self) -> String {
self.to_string()
}
}
impl CacheKey for usize {
fn to_key_string(&self) -> String {
self.to_string()
}
}
impl CacheKey for isize {
fn to_key_string(&self) -> String {
self.to_string()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_string_key() {
let key = "user:123".to_string();
assert_eq!(key.to_key_string(), "user:123");
}
#[test]
fn test_str_key() {
let key: &str = "user:123";
assert_eq!(key.to_key_string(), "user:123");
}
#[test]
fn test_u64_key() {
let key: u64 = 12345;
assert_eq!(key.to_key_string(), "12345");
}
#[test]
fn test_i64_key() {
let key: i64 = -12345;
assert_eq!(key.to_key_string(), "-12345");
}
#[test]
fn test_u128_key() {
let key: u128 = 12345678901234567890;
assert_eq!(key.to_key_string(), "12345678901234567890");
}
}