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}