ohmers 0.1.1

A library for retrieving and storing objects in a Redis server
#[macro_use(incr, decr)] extern crate ohmers;
extern crate redis;
extern crate rustc_serialize;

 use ohmers::{Ohmer, Counter};
use rustc_serialize::Encodable;

#[derive(RustcEncodable, RustcDecodable, PartialEq, Debug)]
struct Candidate {
    id: usize,
    positive_votes: Counter,
    negative_votes: Counter,
}

impl Default for Candidate {
    fn default() -> Self {
        Candidate {
            id: 0,
            positive_votes: Counter,
            negative_votes: Counter,
        }
    }
}
impl Ohmer for Candidate {
    fn id(&self) -> usize { self.id }
    fn set_id(&mut self, id: usize) { self.id = id; }
}

#[test]
fn test_counter() {
    let client = redis::Client::open("redis://127.0.0.1/").unwrap();
    let mut candidate = Candidate::default();
    assert!(candidate.positive_votes.incr(&candidate, "positive_votes", 1, &client).is_err());
    candidate.save(&client).unwrap();
    assert_eq!(candidate.positive_votes.incr(&candidate, "positive_votes", 1, &client).unwrap(), 1);
    assert_eq!(candidate.positive_votes.incr(&candidate, "positive_votes", 1, &client).unwrap(), 2);

    assert_eq!(candidate.positive_votes.get(&candidate, "positive_votes", &client).unwrap(), 2);
    assert_eq!(candidate.positive_votes.get(&candidate, "positive_votes", &client).unwrap(), 2);
    assert_eq!(candidate.negative_votes.get(&candidate, "negative_votes", &client).unwrap(), 0);

    assert_eq!(incr!(candidate.negative_votes, 1, &client).unwrap(), 1);
    assert_eq!(incr!(candidate.positive_votes, &client).unwrap(), 3);
    assert_eq!(decr!(candidate.positive_votes, &client).unwrap(), 2);
}