car_registration/
lib.rs

1extern crate curl;
2extern crate base64;
3extern crate serde_json;
4
5use curl::easy::{Easy, List};
6use base64::{encode};
7use serde_json::Value;
8
9pub fn european_lookup(endpoint: &str, registration_number: &str, username: &str, password: &str ) -> Value {
10    let url = format!("https://www.regcheck.org.uk/api/json.aspx/{}/{}",endpoint, registration_number);
11    return general_lookup(&url, username, password);
12}
13
14pub fn usa_lookup(registration_number: &str, state: &str, username: &str, password: &str ) -> Value {
15    let url = format!("https://www.regcheck.org.uk/api/json.aspx/CheckUSA/{}/{}", registration_number, state);
16    return general_lookup(&url, username, password);
17}
18
19pub fn australian_lookup(registration_number: &str, state: &str, username: &str, password: &str ) -> Value {
20    let url = format!("https://www.regcheck.org.uk/api/json.aspx/CheckAustralia/{}/{}", registration_number, state);
21    return general_lookup(&url, username, password);
22}
23
24fn general_lookup(api: &str, username: &str, password: &str ) -> Value {
25    let mut easy = Easy::new();
26
27    easy.url(api).unwrap();
28
29    let auth = format!("{}:{}",username,password);
30    let b64 = encode(&auth);
31    let basic_auth = format!("Authorization: Basic {}", b64);
32    let mut list = List::new();
33    list.append(&basic_auth).unwrap();
34    easy.http_headers(list).unwrap();
35
36
37    let mut html: String = String::new();
38    {
39        let mut transfer = easy.transfer();
40        transfer.write_function(|data| {
41            html = String::from_utf8(Vec::from(data)).unwrap();
42            Ok(data.len())
43        }).unwrap();
44
45        transfer.perform().unwrap();
46    };
47
48    let json: Value = serde_json::from_str(&html).unwrap_or_else(|e| {
49       panic!("Failed to parse json; error is {}", e);
50    });
51    //println!("{}",html);
52    return json;
53}