#[macro_use(model)] extern crate ohmers; extern crate redis; extern crate rustc_serialize; use std::collections::HashSet; use std::iter::FromIterator; use ohmers::{get, Ohmer}; use redis::Commands; use rustc_serialize::Encodable; model!(Person { name:String = "".to_owned(); age:u8 = 18; }); #[test] fn test_model_macro() { let client = redis::Client::open("redis://127.0.0.1/").unwrap(); let mut person = Person::default(); assert_eq!(person.id, 0); assert_eq!(person.name, "".to_owned()); assert_eq!(person.age, 18); assert_eq!(person.get_class_name(), "Person".to_owned()); assert_eq!(person.index_fields().len(), 0); assert_eq!(person.unique_fields().len(), 0); person.save(&client).unwrap(); assert_eq!(get::(person.id, &client).unwrap(), person); } model!(UPerson { uniques { name:String = "".to_owned(); }; age:u8 = 18; }); #[test] fn test_model_unique_macro() { let client = redis::Client::open("redis://127.0.0.1/").unwrap(); let _:() = client.del("UPerson:uniques:name").unwrap(); let mut person = UPerson::default(); assert_eq!(person.id, 0); assert_eq!(person.name, "".to_owned()); assert_eq!(person.age, 18); assert_eq!(person.get_class_name(), "UPerson".to_owned()); person.save(&client).unwrap(); assert_eq!(person.index_fields().len(), 0); assert_eq!(person.unique_fields(), HashSet::from_iter(vec!["name"])); assert_eq!(get::(person.id, &client).unwrap(), person); } model!(IPerson { indices { age:u8 = 18; }; name:String = "".to_owned(); }); #[test] fn test_model_index_macro() { let client = redis::Client::open("redis://127.0.0.1/").unwrap(); let mut person = IPerson::default(); assert_eq!(person.id, 0); assert_eq!(person.name, "".to_owned()); assert_eq!(person.age, 18); assert_eq!(person.get_class_name(), "IPerson".to_owned()); person.save(&client).unwrap(); assert_eq!(person.unique_fields().len(), 0); assert_eq!(person.index_fields(), HashSet::from_iter(vec!["age"])); assert_eq!(get::(person.id, &client).unwrap(), person); } model!(UIPerson { uniques { name:String = "".to_owned(); }; indices { age:u8 = 18; }; }); #[test] fn test_model_unique_index_macro() { let client = redis::Client::open("redis://127.0.0.1/").unwrap(); let _:() = client.del("UIPerson:uniques:name").unwrap(); let mut person = UIPerson::default(); assert_eq!(person.id, 0); assert_eq!(person.name, "".to_owned()); assert_eq!(person.age, 18); assert_eq!(person.get_class_name(), "UIPerson".to_owned()); person.save(&client).unwrap(); assert_eq!(person.unique_fields(), HashSet::from_iter(vec!["name"])); assert_eq!(person.index_fields(), HashSet::from_iter(vec!["age"])); assert_eq!(get::(person.id, &client).unwrap(), person); }