#![feature(macro_rules)]
#![feature(if_let)]
extern crate serialize;
use rest_api::light::Light as RestLight;
mod json_helper;
pub mod rest_api;
pub mod bridge;
pub struct Hue {
bridge: bridge::Bridge
}
impl Hue {
pub fn new() -> Hue {
let host = "192.168.1.10".to_string();
Hue { bridge: bridge::Bridge::new(host, "newdeveloper".to_string()) }
}
pub fn light<'a>(&'a mut self, index: uint) -> Option<OneLight<'a>> {
self.lights().nth(index)
}
pub fn lights<'a>(&'a mut self) -> LightIter<'a> {
let lights = self.bridge.get_all().unwrap();
LightIter{handle: self, lights: lights.into_iter()}
}
}
trait Light {
}
pub struct LightIter<'a> {
handle: &'a mut Hue,
lights: ::std::vec::MoveItems<(String, rest_api::light::Attributes)>,
}
impl<'a> Iterator<OneLight<'a>> for LightIter<'a> {
fn next(&mut self) -> Option<OneLight<'a>> {
match self.lights.next() {
None => None,
Some((id, attrs)) => {
Some(OneLight{id: id, attrs: attrs})
}
}
}
}
pub struct OneLight<'a> {
id: String,
attrs: rest_api::light::Attributes
}
impl<'a> Light for OneLight<'a> {
}