wekan_cli/client/cards/
import.rs1use super::{ClientError, WekanClient};
2use crate::client::imports::PreparedImportRequest;
3use crate::client::transport::decode_success;
4use reqwest::header::{ACCEPT, CONTENT_TYPE};
5use secrecy::{ExposeSecret, SecretString};
6use serde::{Deserialize, Serialize};
7use std::time::Duration;
8
9#[derive(Serialize)]
10pub struct IcsImportRequest {
11 pub ics: String,
12}
13
14#[derive(Debug, Deserialize)]
15#[serde(deny_unknown_fields, rename_all = "camelCase")]
16pub struct IcsImportResponse {
17 pub created: u64,
18 pub card_ids: Vec<String>,
19}
20
21impl WekanClient {
22 pub async fn import_ics(
23 &self,
24 board_id: &str,
25 swimlane_id: &str,
26 list_id: &str,
27 request: PreparedImportRequest<IcsImportRequest>,
28 token: &SecretString,
29 timeout: Option<Duration>,
30 ) -> Result<IcsImportResponse, ClientError> {
31 let mut url = self.board_endpoint(board_id, None)?;
32 url.path_segments_mut()
33 .expect("board endpoint is a base URL")
34 .extend(["swimlanes", swimlane_id, "lists", list_id, "ics"]);
35 let mut request = self
36 .http
37 .post(url)
38 .header(ACCEPT, "application/json")
39 .header(CONTENT_TYPE, "application/json")
40 .bearer_auth(token.expose_secret())
41 .body(request.into_body());
42 if let Some(timeout) = timeout {
43 request = request.timeout(timeout);
44 }
45 let body = self.execute_success_request(request).await?;
46 decode_success(&body, "ICS import", true)
47 }
48}