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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
extern crate reqwest;
use std::default::Default;
use Error;
use Client;
use chrono::{DateTime, Utc};
pub const DEFAULT_PROJ_LIMIT: i32 = 100;
#[derive(Serialize, Deserialize, Debug)]
pub struct Project {
pub autocreate_branch: Option<bool>,
pub description: Option<String>,
pub is_active: bool,
pub name: String,
pub repo_url: Option<String>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct ProjectGroup {
pub id: i32,
pub name: String,
pub title: String,
pub created_at: DateTime<Utc>,
}
impl Default for ProjectGroup {
fn default() -> ProjectGroup {
ProjectGroup {
id: 0,
name: String::new(),
title: String::new(),
created_at: Utc::now(),
}
}
}
impl Client {
pub fn get_all_projects(&self)
-> Result<Vec<Project>, Error> {
let url = format!("{}/projects?limit={}", self.uri, DEFAULT_PROJ_LIMIT);
let projects: Vec<Project> = self.fetch_url(&url)?;
Ok(projects)
}
pub fn search_projects(&self, s: &str)
-> Result<Vec<Project>, Error> {
let url = format!("{}/projects/search?q={}", self.uri, s);
let projects: Vec<Project> = self.fetch_url(&url)?;
Ok(projects)
}
pub fn get_project_groups(&self)
-> Result<Vec<ProjectGroup>, Error> {
let url = format!("{}/project_groups", self.uri);
let groups: Vec<ProjectGroup> = self.fetch_url(&url)?;
Ok(groups)
}
pub fn get_project_groups_by_name(&self, name: &str)
-> Result<Vec<ProjectGroup>, Error> {
let url = format!("{}/project_groups?name={}", self.uri, name);
let groups: Vec<ProjectGroup> = self.fetch_url(&url)?;
Ok(groups)
}
pub fn get_projects_in_group(&self, g: &ProjectGroup)
-> Result<Vec<Project>, Error> {
let url = format!("{}/project_groups/{}/projects", self.uri, g.id);
let projects: Vec<Project> = self.fetch_url(&url)?;
Ok(projects)
}
}