wekan_cli/client/boards/
attachments.rs1use reqwest::header::ACCEPT;
2use secrecy::{ExposeSecret, SecretString};
3use serde::{Deserialize, Serialize};
4
5use crate::client::{ClientError, WekanClient, transport::decode_success};
6
7#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
8#[serde(
9 deny_unknown_fields,
10 rename_all(deserialize = "camelCase", serialize = "snake_case")
11)]
12pub struct BoardAttachment {
13 pub attachment_id: String,
14 pub attachment_name: String,
15 pub attachment_type: String,
16 #[serde(default, deserialize_with = "present")]
17 pub url: Option<String>,
18 #[serde(default, deserialize_with = "present")]
19 pub url_download: Option<String>,
20 pub board_id: String,
21 #[serde(default, deserialize_with = "present")]
22 pub swimlane_id: Option<String>,
23 #[serde(default, deserialize_with = "present")]
24 pub list_id: Option<String>,
25 #[serde(default, deserialize_with = "present")]
26 pub card_id: Option<String>,
27}
28
29fn present<'de, D: serde::Deserializer<'de>>(d: D) -> Result<Option<String>, D::Error> {
30 String::deserialize(d).map(Some)
31}
32
33impl WekanClient {
34 pub async fn board_attachments(
35 &self,
36 board: &str,
37 token: &SecretString,
38 ) -> Result<Vec<BoardAttachment>, ClientError> {
39 super::members::validate_id(board)?;
40 let body = self
41 .execute_success_request(
42 self.http
43 .get(self.board_endpoint(board, Some("attachments"))?)
44 .header(ACCEPT, "application/json")
45 .bearer_auth(token.expose_secret()),
46 )
47 .await?;
48 decode_success(&body, "board attachment list", true)
49 }
50}