rust_cnb/
missions.rs

1//! Missions API 客户端
2
3use crate::error::{ApiError, Result};
4use reqwest::Client;
5use serde_json::Value;
6use url::Url;
7
8/// Missions API 客户端
9pub struct MissionsClient {
10    base_url: String,
11    client: Client,
12}
13
14impl MissionsClient {
15    /// 创建新的 Missions API 客户端
16    pub fn new(base_url: String, client: Client) -> Self {
17        Self { base_url, client }
18    }
19
20    /// 设置认证信息
21    pub fn with_auth(self, token: &str) -> Self {
22        // 这里可以扩展认证逻辑
23        self
24    }
25
26    /// 查询任务集视图配置信息。Get mission view config.
27    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    /// 设置任务集视图配置信息。Set mission view config.
56    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    /// 删除指定任务集。Delete the specified mission.
86    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    /// 创建任务集
117    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    /// 获取任务集视图列表。Get view list of a mission.
147    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    /// 排序任务集视图。Sort mission view list.
174    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    /// 添加、修改任务集视图。Update a mission view or add a new one.
204    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}