1extern crate serde;
2extern crate serde_json;
3#[macro_use]
4extern crate serde_derive;
5extern crate reqwest;
6
7pub mod structs;
8use self::structs::*;
9
10
11pub struct Client {
12 auth_token: String,
13 base_url: String,
14 client: reqwest::Client,
15}
16
17impl Client {
18 pub fn new(auth_token: String, base_url: String) -> Client {
35 Client {
36 auth_token: format!("Bearer {}", auth_token),
37 base_url: format!("https://{}/api", base_url),
38 client: reqwest::Client::new(),
39 }
40 }
41
42 fn get(&self, url: &String) -> String {
43 self.client.get(url)
44 .header("Authorization", self.auth_token.clone())
45 .send().unwrap().text().unwrap()
46 }
47
48 pub fn get_current_user(&self) -> Result<UserInfo, serde_json::Error> {
51 let url = format!("{}/user", self.base_url);
52 let serial = self.get(&url);
53 let user_info: UserInfo = serde_json::from_str(&serial)?;
54
55 return Ok(user_info)
56 }
57
58 pub fn get_current_user_repos(&self) -> Result<Vec<Repo>, serde_json::Error> {
61 let url = format!("{}/user/repos", self.base_url);
62 let serial = self.get(&url);
63 let user_repos: Vec<Repo> = serde_json::from_str(&serial)?;
64
65 return Ok(user_repos)
66 }
67
68 pub fn get_current_user_feed(&self) -> Result<Vec<FeedElement>, serde_json::Error> {
69 let url = format!("{}/user/feed", self.base_url);
70 let serial = self.get(&url);
71 let user_feed: Vec<FeedElement> = serde_json::from_str(&serial)?;
72
73 return Ok(user_feed)
74 }
75
76 pub fn get_users(&self) -> Result<Vec<UserInfo>, serde_json::Error> {
77 let url = format!("{}/users", self.base_url);
78 let serial = self.get(&url);
79 let users: Vec<UserInfo> = serde_json::from_str(&serial)?;
80
81 return Ok(users)
82 }
83
84 pub fn get_repo_info(&self, owner: &String, repo: &String) -> Result<Repo, serde_json::Error> {
85 let url = format!("{}/repos/{}/{}", self.base_url, owner, repo);
86 let serial = self.get(&url);
87 let repo: Repo = serde_json::from_str(&serial)?;
88
89 return Ok(repo)
90 }
91
92 pub fn get_build_info(&self, owner: &String, repo: &String, build: &String) -> Result<Build, serde_json::Error> {
93 let url = format!("{}/repos/{owner}/{repo}/builds/{build}", self.base_url,
94 owner = owner, repo = repo, build = build);
95 let serial = self.get(&url);
96 let build: Build = serde_json::from_str(&serial)?;
97
98 return Ok(build)
99 }
100
101 pub fn get_build_list(&self, owner: &String, repo: &String) -> Result<Vec<Build>, serde_json::Error> {
102 let url = format!("{}/repos/{owner}/{repo}/builds", self.base_url,
103 owner = owner, repo = repo);
104 let serial = self.get(&url);
105 let builds: Vec<Build> = serde_json::from_str(&serial)?;
106
107 return Ok(builds)
108 }
109
110 pub fn get_registry_info(&self, owner: &String, repo: &String, registry: &String) -> Result<RegistryInfo, serde_json::Error> {
111 let url = format!("{}/repos/{owner}/{repo}/registry/{registry}", self.base_url,
112 owner = owner, repo = repo, registry = registry);
113 let serial = self.get(&url);
114 let registry: RegistryInfo = serde_json::from_str(&serial)?;
115
116 return Ok(registry)
117 }
118
119 pub fn get_registry_list(&self, owner: &String, repo: &String) -> Result<Vec<RegistryInfo>, serde_json::Error> {
120 let url = format!("{}/repos/{owner}/{repo}/registry", self.base_url,
121 owner = owner, repo = repo);
122 let serial = self.get(&url);
123 let registries: Vec<RegistryInfo> = serde_json::from_str(&serial)?;
124
125 return Ok(registries)
126 }
127}