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 return json;
53}