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