1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
extern crate curl;
extern crate base64;
extern crate serde_json;

use curl::easy::{Easy, List};
use base64::{encode};
use serde_json::Value;

pub fn european_lookup(endpoint: &str, registration_number: &str, username: &str, password: &str ) -> Value {
    let url = format!("https://www.regcheck.org.uk/api/json.aspx/{}/{}",endpoint, registration_number);
    return general_lookup(&url, username, password);
}

pub fn usa_lookup(registration_number: &str, state: &str, username: &str, password: &str ) -> Value {
    let url = format!("https://www.regcheck.org.uk/api/json.aspx/CheckUSA/{}/{}", registration_number, state);
    return general_lookup(&url, username, password);
}

pub fn australian_lookup(registration_number: &str, state: &str, username: &str, password: &str ) -> Value {
    let url = format!("https://www.regcheck.org.uk/api/json.aspx/CheckAustralia/{}/{}", registration_number, state);
    return general_lookup(&url, username, password);
}

fn general_lookup(api: &str, username: &str, password: &str ) -> Value {
    let mut easy = Easy::new();

    easy.url(api).unwrap();

    let auth = format!("{}:{}",username,password);
    let b64 = encode(&auth);
    let basic_auth = format!("Authorization: Basic {}", b64);
    let mut list = List::new();
    list.append(&basic_auth).unwrap();
    easy.http_headers(list).unwrap();


    let mut html: String = String::new();
    {
        let mut transfer = easy.transfer();
        transfer.write_function(|data| {
            html = String::from_utf8(Vec::from(data)).unwrap();
            Ok(data.len())
        }).unwrap();

        transfer.perform().unwrap();
    };

    let json: Value = serde_json::from_str(&html).unwrap_or_else(|e| {
       panic!("Failed to parse json; error is {}", e);
    });
    //println!("{}",html);
    return json;
}