ux-webmachine 0.1.0

Port of the Ruby Webmachine library to Rust
Documentation
use webmachine::cache::{Cache, CacheKey, HashCache};

#[derive(Clone, Eq, Hash, PartialEq)]
struct CustomKey(&'static str);

impl CacheKey for CustomKey {
  type Target = u32;
}

#[test]
fn new_hash_cache() {
  let _ = HashCache::new();
}
 
#[test]
fn new_hash_cache_custom_key() {
  let cache = HashCache::new();

  assert_eq!(cache.get(&CustomKey("a")), None);
}


#[test]
fn save() {
  let mut cache = HashCache::new();

  cache.save(CustomKey("a"), 1);
  cache.save(CustomKey("a"), 2);
  cache.save(CustomKey("b"), 3);
  cache.save(CustomKey("c"), 4);
}

#[test]
fn save_get() {
  let mut cache = HashCache::new();

  let key = CustomKey("key");
  cache.save(key.clone(), 42);

  assert_eq!(cache.get(&key), Some(&42));
}

#[test]
fn several_types_save_and_gotten() {
  let mut cache = HashCache::new();

  #[derive(Clone, Eq, Hash, PartialEq)]
  struct CustomKey2(u64);
  
  impl CacheKey for CustomKey2 {
    type Target = bool;
  }

  #[derive(Clone, Eq, Hash, PartialEq)]
  struct CustomKey3(String);
  
  impl CacheKey for CustomKey3 {
    type Target = Option<String>;
  }

  #[derive(Clone, Eq, Hash, PartialEq)]
  struct CustomKey4(u64);
  
  impl CacheKey for CustomKey4 {
    type Target = String;
  }

  let key1 = CustomKey("hey");
  let key2 = CustomKey2(12);
  let key3 = CustomKey3("foobar".to_owned());
  let key4 = CustomKey4(12);

  cache.save(key1.clone(), 42);
  cache.save(key2.clone(), false);
  cache.save(key3.clone(), None);
  cache.save(key4.clone(), "yay".to_owned());


  assert_eq!(cache.get(&key1), Some(&42));
  assert_eq!(cache.get(&key2), Some(&false));
  assert_eq!(cache.get(&key3), Some(&None));
  assert_eq!(cache.get(&key4), Some(&"yay".to_owned()));
}