front_api/
drafts.rs

1use anyhow::Result;
2
3use crate::Client;
4#[derive(Clone, Debug)]
5pub struct Drafts {
6    pub client: Client,
7}
8
9impl Drafts {
10    #[doc(hidden)]
11    pub fn new(client: Client) -> Self {
12        Self { client }
13    }
14
15    #[doc = "List conversation drafts\n\nList the drafts in a \
16             conversation.\n\n**Parameters:**\n\n- `conversation_id: &'astr`: The conversation ID \
17             (required)\n\n```rust,no_run\nasync fn example_drafts_list_conversation() -> \
18             anyhow::Result<()> {\n    let client = front_api::Client::new_from_env();\n    let \
19             result: front_api::types::ListConversationDraftsResponse =\n        \
20             client.drafts().list_conversation(\"some-string\").await?;\n    println!(\"{:?}\", \
21             result);\n    Ok(())\n}\n```"]
22    #[tracing::instrument]
23    pub async fn list_conversation<'a>(
24        &'a self,
25        conversation_id: &'a str,
26    ) -> Result<crate::types::ListConversationDraftsResponse, crate::types::error::Error> {
27        let mut req = self.client.client.request(
28            http::Method::GET,
29            &format!(
30                "{}/{}",
31                self.client.base_url,
32                "conversations/{conversation_id}/drafts"
33                    .replace("{conversation_id}", conversation_id)
34            ),
35        );
36        req = req.bearer_auth(&self.client.token);
37        let resp = req.send().await?;
38        let status = resp.status();
39        if status.is_success() {
40            let text = resp.text().await.unwrap_or_default();
41            serde_json::from_str(&text).map_err(|err| {
42                crate::types::error::Error::from_serde_error(
43                    format_serde_error::SerdeError::new(text.to_string(), err),
44                    status,
45                )
46            })
47        } else {
48            Err(crate::types::error::Error::UnexpectedResponse(resp))
49        }
50    }
51
52    #[doc = "Create draft reply\n\nCreate a new draft as a reply to the last message in the conversation.\n\n**Parameters:**\n\n- `conversation_id: &'astr`: The conversation ID (required)\n\n```rust,no_run\nasync fn example_drafts_create_reply() -> anyhow::Result<()> {\n    let client = front_api::Client::new_from_env();\n    let result: front_api::types::MessageResponse = client\n        .drafts()\n        .create_reply(\n            \"some-string\",\n            &front_api::types::ReplyDraft {\n                author_id: \"some-string\".to_string(),\n                to: Some(vec![\"some-string\".to_string()]),\n                cc: Some(vec![\"some-string\".to_string()]),\n                bcc: Some(vec![\"some-string\".to_string()]),\n                subject: Some(\"some-string\".to_string()),\n                body: \"some-string\".to_string(),\n                attachments: Some(vec![bytes::Bytes::from(\"some-string\")]),\n                mode: Some(front_api::types::Mode::Private),\n                signature_id: Some(\"some-string\".to_string()),\n                should_add_default_signature: Some(true),\n                channel_id: Some(\"some-string\".to_string()),\n            },\n        )\n        .await?;\n    println!(\"{:?}\", result);\n    Ok(())\n}\n```"]
53    #[tracing::instrument]
54    pub async fn create_reply<'a>(
55        &'a self,
56        conversation_id: &'a str,
57        body: &crate::types::ReplyDraft,
58    ) -> Result<crate::types::MessageResponse, crate::types::error::Error> {
59        let mut req = self.client.client.request(
60            http::Method::POST,
61            &format!(
62                "{}/{}",
63                self.client.base_url,
64                "conversations/{conversation_id}/drafts"
65                    .replace("{conversation_id}", conversation_id)
66            ),
67        );
68        req = req.bearer_auth(&self.client.token);
69        req = req.json(body);
70        let resp = req.send().await?;
71        let status = resp.status();
72        if status.is_success() {
73            let text = resp.text().await.unwrap_or_default();
74            serde_json::from_str(&text).map_err(|err| {
75                crate::types::error::Error::from_serde_error(
76                    format_serde_error::SerdeError::new(text.to_string(), err),
77                    status,
78                )
79            })
80        } else {
81            Err(crate::types::error::Error::UnexpectedResponse(resp))
82        }
83    }
84
85    #[doc = "Create draft\n\nCreate a draft message which is the first message of a new conversation.\n\n**Parameters:**\n\n- `channel_id: &'astr`: The channel ID (required)\n\n```rust,no_run\nasync fn example_drafts_create() -> anyhow::Result<()> {\n    let client = front_api::Client::new_from_env();\n    let result: front_api::types::MessageResponse = client\n        .drafts()\n        .create(\n            \"some-string\",\n            &front_api::types::CreateDraft {\n                author_id: \"some-string\".to_string(),\n                to: Some(vec![\"some-string\".to_string()]),\n                cc: Some(vec![\"some-string\".to_string()]),\n                bcc: Some(vec![\"some-string\".to_string()]),\n                subject: Some(\"some-string\".to_string()),\n                body: \"some-string\".to_string(),\n                attachments: Some(vec![bytes::Bytes::from(\"some-string\")]),\n                mode: Some(front_api::types::Mode::Shared),\n                signature_id: Some(\"some-string\".to_string()),\n                should_add_default_signature: Some(true),\n            },\n        )\n        .await?;\n    println!(\"{:?}\", result);\n    Ok(())\n}\n```"]
86    #[tracing::instrument]
87    pub async fn create<'a>(
88        &'a self,
89        channel_id: &'a str,
90        body: &crate::types::CreateDraft,
91    ) -> Result<crate::types::MessageResponse, crate::types::error::Error> {
92        let mut req = self.client.client.request(
93            http::Method::POST,
94            &format!(
95                "{}/{}",
96                self.client.base_url,
97                "channels/{channel_id}/drafts".replace("{channel_id}", channel_id)
98            ),
99        );
100        req = req.bearer_auth(&self.client.token);
101        req = req.json(body);
102        let resp = req.send().await?;
103        let status = resp.status();
104        if status.is_success() {
105            let text = resp.text().await.unwrap_or_default();
106            serde_json::from_str(&text).map_err(|err| {
107                crate::types::error::Error::from_serde_error(
108                    format_serde_error::SerdeError::new(text.to_string(), err),
109                    status,
110                )
111            })
112        } else {
113            Err(crate::types::error::Error::UnexpectedResponse(resp))
114        }
115    }
116
117    #[doc = "Edit draft\n\nEdit a draft message.\n\n**Parameters:**\n\n- `message_id: &'astr`: The \
118             draft ID (required)\n\n```rust,no_run\nasync fn example_drafts_edit() -> \
119             anyhow::Result<()> {\n    let client = front_api::Client::new_from_env();\n    let \
120             result: front_api::types::MessageResponse = client\n        .drafts()\n        \
121             .edit(\n            \"some-string\",\n            \
122             &front_api::types::EditDraft::Shared {\n                version: \
123             Some(\"some-string\".to_string()),\n            },\n        )\n        .await?;\n    \
124             println!(\"{:?}\", result);\n    Ok(())\n}\n```"]
125    #[tracing::instrument]
126    pub async fn edit<'a>(
127        &'a self,
128        message_id: &'a str,
129        body: &crate::types::EditDraft,
130    ) -> Result<crate::types::MessageResponse, crate::types::error::Error> {
131        let mut req = self.client.client.request(
132            http::Method::PATCH,
133            &format!(
134                "{}/{}",
135                self.client.base_url,
136                "drafts/{message_id}/".replace("{message_id}", message_id)
137            ),
138        );
139        req = req.bearer_auth(&self.client.token);
140        req = req.json(body);
141        let resp = req.send().await?;
142        let status = resp.status();
143        if status.is_success() {
144            let text = resp.text().await.unwrap_or_default();
145            serde_json::from_str(&text).map_err(|err| {
146                crate::types::error::Error::from_serde_error(
147                    format_serde_error::SerdeError::new(text.to_string(), err),
148                    status,
149                )
150            })
151        } else {
152            Err(crate::types::error::Error::UnexpectedResponse(resp))
153        }
154    }
155
156    #[doc = "Delete draft\n\nDelete a draft message.\n\n**Parameters:**\n\n- `draft_id: &'astr`: The draft ID (required)\n\n```rust,no_run\nasync fn example_drafts_delete() -> anyhow::Result<()> {\n    let client = front_api::Client::new_from_env();\n    client\n        .drafts()\n        .delete(\n            \"some-string\",\n            &serde_json::Value::String(\"some-string\".to_string()),\n        )\n        .await?;\n    Ok(())\n}\n```"]
157    #[tracing::instrument]
158    pub async fn delete<'a>(
159        &'a self,
160        draft_id: &'a str,
161        body: &crate::types::DeleteDraft,
162    ) -> Result<(), crate::types::error::Error> {
163        let mut req = self.client.client.request(
164            http::Method::DELETE,
165            &format!(
166                "{}/{}",
167                self.client.base_url,
168                "drafts/{draft_id}".replace("{draft_id}", draft_id)
169            ),
170        );
171        req = req.bearer_auth(&self.client.token);
172        req = req.json(body);
173        let resp = req.send().await?;
174        let status = resp.status();
175        if status.is_success() {
176            Ok(())
177        } else {
178            Err(crate::types::error::Error::UnexpectedResponse(resp))
179        }
180    }
181}