1use crate::error::{ApiError, Result};
4use reqwest::Client;
5use serde_json::Value;
6use url::Url;
7
8pub struct MissionsClient {
10 base_url: String,
11 client: Client,
12}
13
14impl MissionsClient {
15 pub fn new(base_url: String, client: Client) -> Self {
17 Self { base_url, client }
18 }
19
20 pub fn with_auth(self, token: &str) -> Self {
22 self
24 }
25
26 pub async fn get_mission_mission_view(
28 &self,
29 mission: String,
30 id: String,
31 ) -> Result<Value> {
32 let path = format!("/{}/-/mission/view", mission);
33 let mut url = Url::parse(&format!("{}{}", self.base_url, path))?;
34
35 url.query_pairs_mut().append_pair("id", &id.to_string());
36
37 let request = self.client.request(
38 reqwest::Method::GET,
39 url
40 );
41
42
43
44
45 let response = request.send().await?;
46
47 if response.status().is_success() {
48 let json: Value = response.json().await?;
49 Ok(json)
50 } else {
51 Err(ApiError::HttpError(response.status().as_u16()))
52 }
53 }
54
55 pub async fn post_mission_mission_view(
57 &self,
58 mission: String,
59 request_data: serde_json::Value,
60 ) -> Result<Value> {
61 let path = format!("/{}/-/mission/view", mission);
62 let url = Url::parse(&format!("{}{}", self.base_url, path))?;
63
64
65
66 let mut request = self.client.request(
67 reqwest::Method::POST,
68 url
69 );
70
71
72
73 request = request.json(&request_data);
74
75 let response = request.send().await?;
76
77 if response.status().is_success() {
78 let json: Value = response.json().await?;
79 Ok(json)
80 } else {
81 Err(ApiError::HttpError(response.status().as_u16()))
82 }
83 }
84
85 pub async fn delete_mission(
87 &self,
88 mission: String,
89 x_cnb_identity_ticket: Option<String>,
90 ) -> Result<Value> {
91 let path = format!("/{}", mission);
92 let url = Url::parse(&format!("{}{}", self.base_url, path))?;
93
94
95 let mut request = self.client.request(
96 reqwest::Method::DELETE,
97 url
98 );
99
100
101 if let Some(value) = x_cnb_identity_ticket {
102 request = request.header("x-cnb-identity-ticket", value);
103 }
104
105
106 let response = request.send().await?;
107
108 if response.status().is_success() {
109 let json: Value = response.json().await?;
110 Ok(json)
111 } else {
112 Err(ApiError::HttpError(response.status().as_u16()))
113 }
114 }
115
116 pub async fn post_group_missions(
118 &self,
119 group: String,
120 request_data: serde_json::Value,
121 ) -> Result<Value> {
122 let path = format!("/{}/-/missions", group);
123 let url = Url::parse(&format!("{}{}", self.base_url, path))?;
124
125
126
127 let mut request = self.client.request(
128 reqwest::Method::POST,
129 url
130 );
131
132
133
134 request = request.json(&request_data);
135
136 let response = request.send().await?;
137
138 if response.status().is_success() {
139 let json: Value = response.json().await?;
140 Ok(json)
141 } else {
142 Err(ApiError::HttpError(response.status().as_u16()))
143 }
144 }
145
146 pub async fn get_mission_mission_view_list(
148 &self,
149 mission: String,
150 ) -> Result<Value> {
151 let path = format!("/{}/-/mission/view-list", mission);
152 let url = Url::parse(&format!("{}{}", self.base_url, path))?;
153
154
155 let request = self.client.request(
156 reqwest::Method::GET,
157 url
158 );
159
160
161
162
163 let response = request.send().await?;
164
165 if response.status().is_success() {
166 let json: Value = response.json().await?;
167 Ok(json)
168 } else {
169 Err(ApiError::HttpError(response.status().as_u16()))
170 }
171 }
172
173 pub async fn post_mission_mission_view_list(
175 &self,
176 mission: String,
177 request_data: serde_json::Value,
178 ) -> Result<Value> {
179 let path = format!("/{}/-/mission/view-list", mission);
180 let url = Url::parse(&format!("{}{}", self.base_url, path))?;
181
182
183
184 let mut request = self.client.request(
185 reqwest::Method::POST,
186 url
187 );
188
189
190
191 request = request.json(&request_data);
192
193 let response = request.send().await?;
194
195 if response.status().is_success() {
196 let json: Value = response.json().await?;
197 Ok(json)
198 } else {
199 Err(ApiError::HttpError(response.status().as_u16()))
200 }
201 }
202
203 pub async fn put_mission_mission_view_list(
205 &self,
206 mission: String,
207 request_data: serde_json::Value,
208 ) -> Result<Value> {
209 let path = format!("/{}/-/mission/view-list", mission);
210 let url = Url::parse(&format!("{}{}", self.base_url, path))?;
211
212
213
214 let mut request = self.client.request(
215 reqwest::Method::PUT,
216 url
217 );
218
219
220
221 request = request.json(&request_data);
222
223 let response = request.send().await?;
224
225 if response.status().is_success() {
226 let json: Value = response.json().await?;
227 Ok(json)
228 } else {
229 Err(ApiError::HttpError(response.status().as_u16()))
230 }
231 }
232
233}