1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
use crate::*;
use reqwest;
use serde_json::*;

pub fn discover_hue_bridge() -> HueResult<String> {
    let objects: Vec<Map<String, Value>> =
        reqwest::blocking::get("https://discovery.meethue.com/")?.json()?;

    if objects.len() == 0 {
        Err("expected non-empty array")?
    }
    let ref object = objects[0];

    let ip = object
        .get("internalipaddress")
        .ok_or("Expected internalipaddress")?;
    Ok(ip
        .as_str()
        .ok_or("expect a string in internalipaddress")?
        .to_string())
}