Skip to main content

wekan_cli/client/lists/
transfer.rs

1use super::{ClientError, IdResponse, WekanClient, require_non_empty};
2use crate::client::transport::decode_success;
3use reqwest::header::ACCEPT;
4use secrecy::{ExposeSecret, SecretString};
5use serde::Serialize;
6use serde_json::Value;
7
8#[derive(Clone, Debug, Default, Eq, PartialEq, Serialize)]
9pub struct TransferListRequest {
10    #[serde(rename = "toBoardId", skip_serializing_if = "Option::is_none")]
11    pub target_board_id: Option<String>,
12    #[serde(rename = "toSwimlaneId", skip_serializing_if = "Option::is_none")]
13    pub target_swimlane_id: Option<String>,
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub position: Option<Value>,
16}
17impl WekanClient {
18    pub async fn copy_list(
19        &self,
20        board_id: &str,
21        list_id: &str,
22        request: &TransferListRequest,
23        token: &SecretString,
24    ) -> Result<String, ClientError> {
25        self.transfer_list(board_id, list_id, request, token, "copy")
26            .await
27    }
28    pub async fn move_list(
29        &self,
30        board_id: &str,
31        list_id: &str,
32        request: &TransferListRequest,
33        token: &SecretString,
34    ) -> Result<String, ClientError> {
35        self.transfer_list(board_id, list_id, request, token, "move")
36            .await
37    }
38    async fn transfer_list(
39        &self,
40        board_id: &str,
41        list_id: &str,
42        request: &TransferListRequest,
43        token: &SecretString,
44        action: &str,
45    ) -> Result<String, ClientError> {
46        let mut endpoint = self.list_endpoint(board_id, Some(list_id))?;
47        endpoint
48            .path_segments_mut()
49            .expect("HTTP endpoint")
50            .push(action);
51        let body = self
52            .execute_success_request(
53                self.http
54                    .post(endpoint)
55                    .header(ACCEPT, "application/json")
56                    .bearer_auth(token.expose_secret())
57                    .json(request),
58            )
59            .await?;
60        let response: IdResponse = decode_success(&body, "list transfer", true)?;
61        require_non_empty(&response.id, "list transfer", "list id")?;
62        Ok(response.id)
63    }
64}