paperless_api_client/
workflow_triggers.rs

1use crate::Client;
2use anyhow::Result;
3#[derive(Clone, Debug)]
4pub struct WorkflowTriggers {
5    pub client: Client,
6}
7
8impl WorkflowTriggers {
9    #[doc(hidden)]
10    pub fn new(client: Client) -> Self {
11        Self { client }
12    }
13
14    #[doc = "Perform a `GET` request to `/api/workflow_triggers/`.\n\n**Parameters:**\n\n- `page: Option<i64>`: A page number within the paginated result set.\n- `page_size: Option<i64>`: Number of results to return per page.\n\n```rust,no_run\nuse futures_util::TryStreamExt;\nasync fn example_workflow_triggers_list_stream() -> anyhow::Result<()> {\n    let client = paperless_api_client::Client::new_from_env();\n    let mut workflow_triggers = client.workflow_triggers();\n    let mut stream = workflow_triggers.list_stream(Some(4 as i64));\n    loop {\n        match stream.try_next().await {\n            Ok(Some(item)) => {\n                println!(\"{:?}\", item);\n            }\n            Ok(None) => {\n                break;\n            }\n            Err(err) => {\n                return Err(err.into());\n            }\n        }\n    }\n\n    Ok(())\n}\n```"]
15    #[tracing::instrument]
16    #[allow(non_snake_case)]
17    pub async fn list<'a>(
18        &'a self,
19        page: Option<i64>,
20        page_size: Option<i64>,
21    ) -> Result<crate::types::PaginatedWorkflowTriggerList, crate::types::error::Error> {
22        let mut req = self.client.client.request(
23            http::Method::GET,
24            format!("{}/{}", self.client.base_url, "api/workflow_triggers/"),
25        );
26        req = req.header("Authorization", format!("Token {}", &self.client.token));
27        let mut query_params = vec![];
28        if let Some(p) = page {
29            query_params.push(("page", format!("{p}")));
30        }
31
32        if let Some(p) = page_size {
33            query_params.push(("page_size", format!("{p}")));
34        }
35
36        req = req.query(&query_params);
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            let text = resp.text().await.unwrap_or_default();
49            Err(crate::types::error::Error::Server {
50                body: text.to_string(),
51                status,
52            })
53        }
54    }
55
56    #[doc = "Perform a `GET` request to `/api/workflow_triggers/`.\n\n**Parameters:**\n\n- `page: Option<i64>`: A page number within the paginated result set.\n- `page_size: Option<i64>`: Number of results to return per page.\n\n```rust,no_run\nuse futures_util::TryStreamExt;\nasync fn example_workflow_triggers_list_stream() -> anyhow::Result<()> {\n    let client = paperless_api_client::Client::new_from_env();\n    let mut workflow_triggers = client.workflow_triggers();\n    let mut stream = workflow_triggers.list_stream(Some(4 as i64));\n    loop {\n        match stream.try_next().await {\n            Ok(Some(item)) => {\n                println!(\"{:?}\", item);\n            }\n            Ok(None) => {\n                break;\n            }\n            Err(err) => {\n                return Err(err.into());\n            }\n        }\n    }\n\n    Ok(())\n}\n```"]
57    #[tracing::instrument]
58    #[cfg(not(feature = "js"))]
59    #[allow(non_snake_case)]
60    pub fn list_stream<'a>(
61        &'a self,
62        page_size: Option<i64>,
63    ) -> impl futures::Stream<Item = Result<crate::types::WorkflowTrigger, crate::types::error::Error>>
64           + Unpin
65           + '_ {
66        use crate::types::paginate::Pagination;
67        use futures::{StreamExt, TryFutureExt, TryStreamExt};
68        self.list(None, page_size)
69            .map_ok(move |result| {
70                let items = futures::stream::iter(result.items().into_iter().map(Ok));
71                let next_pages = futures::stream::try_unfold(
72                    (None, result),
73                    move |(prev_page_token, new_result)| async move {
74                        if new_result.has_more_pages()
75                            && !new_result.items().is_empty()
76                            && prev_page_token != new_result.next_page_token()
77                        {
78                            async {
79                                let mut req = self.client.client.request(
80                                    http::Method::GET,
81                                    format!(
82                                        "{}/{}",
83                                        self.client.base_url, "api/workflow_triggers/"
84                                    ),
85                                );
86                                req = req.header(
87                                    "Authorization",
88                                    format!("Token {}", &self.client.token),
89                                );
90                                let mut request = req.build()?;
91                                request = new_result.next_page(request)?;
92                                let resp = self.client.client.execute(request).await?;
93                                let status = resp.status();
94                                if status.is_success() {
95                                    let text = resp.text().await.unwrap_or_default();
96                                    serde_json::from_str(&text).map_err(|err| {
97                                        crate::types::error::Error::from_serde_error(
98                                            format_serde_error::SerdeError::new(
99                                                text.to_string(),
100                                                err,
101                                            ),
102                                            status,
103                                        )
104                                    })
105                                } else {
106                                    let text = resp.text().await.unwrap_or_default();
107                                    Err(crate::types::error::Error::Server {
108                                        body: text.to_string(),
109                                        status,
110                                    })
111                                }
112                            }
113                            .map_ok(|result: crate::types::PaginatedWorkflowTriggerList| {
114                                Some((
115                                    futures::stream::iter(result.items().into_iter().map(Ok)),
116                                    (new_result.next_page_token(), result),
117                                ))
118                            })
119                            .await
120                        } else {
121                            Ok(None)
122                        }
123                    },
124                )
125                .try_flatten();
126                items.chain(next_pages)
127            })
128            .try_flatten_stream()
129            .boxed()
130    }
131
132    #[doc = "Perform a `POST` request to `/api/workflow_triggers/`.\n\n```rust,no_run\nasync fn example_workflow_triggers_create() -> anyhow::Result<()> {\n    let client = paperless_api_client::Client::new_from_env();\n    let result: paperless_api_client::types::WorkflowTrigger = client\n        .workflow_triggers()\n        .create(&paperless_api_client::types::WorkflowTriggerRequest {\n            id: Some(4 as i64),\n            sources: vec![4 as i64],\n            type_: 4 as i64,\n            filter_path: Some(\"some-string\".to_string()),\n            filter_filename: Some(\"some-string\".to_string()),\n            filter_mailrule: Some(4 as i64),\n            matching_algorithm: Some(4 as i64),\n            match_: Some(\"some-string\".to_string()),\n            is_insensitive: Some(true),\n            filter_has_tags: Some(vec![4 as i64]),\n            filter_has_correspondent: Some(4 as i64),\n            filter_has_document_type: Some(4 as i64),\n            schedule_offset_days: Some(4 as i64),\n            schedule_is_recurring: Some(true),\n            schedule_recurring_interval_days: Some(4 as i64),\n            schedule_date_field: Some(paperless_api_client::types::ScheduleDateFieldEnum::Modified),\n            schedule_date_custom_field: Some(4 as i64),\n        })\n        .await?;\n    println!(\"{:?}\", result);\n    Ok(())\n}\n```"]
133    #[tracing::instrument]
134    #[allow(non_snake_case)]
135    pub async fn create<'a>(
136        &'a self,
137        body: &crate::types::WorkflowTriggerRequest,
138    ) -> Result<crate::types::WorkflowTrigger, crate::types::error::Error> {
139        let mut req = self.client.client.request(
140            http::Method::POST,
141            format!("{}/{}", self.client.base_url, "api/workflow_triggers/"),
142        );
143        req = req.header("Authorization", format!("Token {}", &self.client.token));
144        req = req.json(body);
145        let resp = req.send().await?;
146        let status = resp.status();
147        if status.is_success() {
148            let text = resp.text().await.unwrap_or_default();
149            serde_json::from_str(&text).map_err(|err| {
150                crate::types::error::Error::from_serde_error(
151                    format_serde_error::SerdeError::new(text.to_string(), err),
152                    status,
153                )
154            })
155        } else {
156            let text = resp.text().await.unwrap_or_default();
157            Err(crate::types::error::Error::Server {
158                body: text.to_string(),
159                status,
160            })
161        }
162    }
163
164    #[doc = "Perform a `GET` request to `/api/workflow_triggers/{id}/`.\n\n**Parameters:**\n\n- `id: i64`: A unique integer value identifying this workflow trigger. (required)\n\n```rust,no_run\nasync fn example_workflow_triggers_retrieve() -> anyhow::Result<()> {\n    let client = paperless_api_client::Client::new_from_env();\n    let result: paperless_api_client::types::WorkflowTrigger =\n        client.workflow_triggers().retrieve(4 as i64).await?;\n    println!(\"{:?}\", result);\n    Ok(())\n}\n```"]
165    #[tracing::instrument]
166    #[allow(non_snake_case)]
167    pub async fn retrieve<'a>(
168        &'a self,
169        id: i64,
170    ) -> Result<crate::types::WorkflowTrigger, crate::types::error::Error> {
171        let mut req = self.client.client.request(
172            http::Method::GET,
173            format!(
174                "{}/{}",
175                self.client.base_url,
176                "api/workflow_triggers/{id}/".replace("{id}", &format!("{id}"))
177            ),
178        );
179        req = req.header("Authorization", format!("Token {}", &self.client.token));
180        let resp = req.send().await?;
181        let status = resp.status();
182        if status.is_success() {
183            let text = resp.text().await.unwrap_or_default();
184            serde_json::from_str(&text).map_err(|err| {
185                crate::types::error::Error::from_serde_error(
186                    format_serde_error::SerdeError::new(text.to_string(), err),
187                    status,
188                )
189            })
190        } else {
191            let text = resp.text().await.unwrap_or_default();
192            Err(crate::types::error::Error::Server {
193                body: text.to_string(),
194                status,
195            })
196        }
197    }
198
199    #[doc = "Perform a `PUT` request to `/api/workflow_triggers/{id}/`.\n\n**Parameters:**\n\n- `id: i64`: A unique integer value identifying this workflow trigger. (required)\n\n```rust,no_run\nasync fn example_workflow_triggers_update() -> anyhow::Result<()> {\n    let client = paperless_api_client::Client::new_from_env();\n    let result: paperless_api_client::types::WorkflowTrigger = client\n        .workflow_triggers()\n        .update(\n            4 as i64,\n            &paperless_api_client::types::WorkflowTriggerRequest {\n                id: Some(4 as i64),\n                sources: vec![4 as i64],\n                type_: 4 as i64,\n                filter_path: Some(\"some-string\".to_string()),\n                filter_filename: Some(\"some-string\".to_string()),\n                filter_mailrule: Some(4 as i64),\n                matching_algorithm: Some(4 as i64),\n                match_: Some(\"some-string\".to_string()),\n                is_insensitive: Some(true),\n                filter_has_tags: Some(vec![4 as i64]),\n                filter_has_correspondent: Some(4 as i64),\n                filter_has_document_type: Some(4 as i64),\n                schedule_offset_days: Some(4 as i64),\n                schedule_is_recurring: Some(true),\n                schedule_recurring_interval_days: Some(4 as i64),\n                schedule_date_field: Some(paperless_api_client::types::ScheduleDateFieldEnum::Modified),\n                schedule_date_custom_field: Some(4 as i64),\n            },\n        )\n        .await?;\n    println!(\"{:?}\", result);\n    Ok(())\n}\n```"]
200    #[tracing::instrument]
201    #[allow(non_snake_case)]
202    pub async fn update<'a>(
203        &'a self,
204        id: i64,
205        body: &crate::types::WorkflowTriggerRequest,
206    ) -> Result<crate::types::WorkflowTrigger, crate::types::error::Error> {
207        let mut req = self.client.client.request(
208            http::Method::PUT,
209            format!(
210                "{}/{}",
211                self.client.base_url,
212                "api/workflow_triggers/{id}/".replace("{id}", &format!("{id}"))
213            ),
214        );
215        req = req.header("Authorization", format!("Token {}", &self.client.token));
216        req = req.json(body);
217        let resp = req.send().await?;
218        let status = resp.status();
219        if status.is_success() {
220            let text = resp.text().await.unwrap_or_default();
221            serde_json::from_str(&text).map_err(|err| {
222                crate::types::error::Error::from_serde_error(
223                    format_serde_error::SerdeError::new(text.to_string(), err),
224                    status,
225                )
226            })
227        } else {
228            let text = resp.text().await.unwrap_or_default();
229            Err(crate::types::error::Error::Server {
230                body: text.to_string(),
231                status,
232            })
233        }
234    }
235
236    #[doc = "Perform a `DELETE` request to `/api/workflow_triggers/{id}/`.\n\n**Parameters:**\n\n- `id: i64`: A unique integer value identifying this workflow trigger. (required)\n\n```rust,no_run\nasync fn example_workflow_triggers_destroy() -> anyhow::Result<()> {\n    let client = paperless_api_client::Client::new_from_env();\n    client.workflow_triggers().destroy(4 as i64).await?;\n    Ok(())\n}\n```"]
237    #[tracing::instrument]
238    #[allow(non_snake_case)]
239    pub async fn destroy<'a>(&'a self, id: i64) -> Result<(), crate::types::error::Error> {
240        let mut req = self.client.client.request(
241            http::Method::DELETE,
242            format!(
243                "{}/{}",
244                self.client.base_url,
245                "api/workflow_triggers/{id}/".replace("{id}", &format!("{id}"))
246            ),
247        );
248        req = req.header("Authorization", format!("Token {}", &self.client.token));
249        let resp = req.send().await?;
250        let status = resp.status();
251        if status.is_success() {
252            Ok(())
253        } else {
254            let text = resp.text().await.unwrap_or_default();
255            Err(crate::types::error::Error::Server {
256                body: text.to_string(),
257                status,
258            })
259        }
260    }
261
262    #[doc = "Perform a `PATCH` request to `/api/workflow_triggers/{id}/`.\n\n**Parameters:**\n\n- `id: i64`: A unique integer value identifying this workflow trigger. (required)\n\n```rust,no_run\nasync fn example_workflow_triggers_partial_update() -> anyhow::Result<()> {\n    let client = paperless_api_client::Client::new_from_env();\n    let result: paperless_api_client::types::WorkflowTrigger = client\n        .workflow_triggers()\n        .partial_update(\n            4 as i64,\n            &paperless_api_client::types::PatchedWorkflowTriggerRequest {\n                id: Some(4 as i64),\n                sources: vec![4 as i64],\n                type_: Some(4 as i64),\n                filter_path: Some(\"some-string\".to_string()),\n                filter_filename: Some(\"some-string\".to_string()),\n                filter_mailrule: Some(4 as i64),\n                matching_algorithm: Some(4 as i64),\n                match_: Some(\"some-string\".to_string()),\n                is_insensitive: Some(true),\n                filter_has_tags: Some(vec![4 as i64]),\n                filter_has_correspondent: Some(4 as i64),\n                filter_has_document_type: Some(4 as i64),\n                schedule_offset_days: Some(4 as i64),\n                schedule_is_recurring: Some(true),\n                schedule_recurring_interval_days: Some(4 as i64),\n                schedule_date_field: Some(paperless_api_client::types::ScheduleDateFieldEnum::Modified),\n                schedule_date_custom_field: Some(4 as i64),\n            },\n        )\n        .await?;\n    println!(\"{:?}\", result);\n    Ok(())\n}\n```"]
263    #[tracing::instrument]
264    #[allow(non_snake_case)]
265    pub async fn partial_update<'a>(
266        &'a self,
267        id: i64,
268        body: &crate::types::PatchedWorkflowTriggerRequest,
269    ) -> Result<crate::types::WorkflowTrigger, crate::types::error::Error> {
270        let mut req = self.client.client.request(
271            http::Method::PATCH,
272            format!(
273                "{}/{}",
274                self.client.base_url,
275                "api/workflow_triggers/{id}/".replace("{id}", &format!("{id}"))
276            ),
277        );
278        req = req.header("Authorization", format!("Token {}", &self.client.token));
279        req = req.json(body);
280        let resp = req.send().await?;
281        let status = resp.status();
282        if status.is_success() {
283            let text = resp.text().await.unwrap_or_default();
284            serde_json::from_str(&text).map_err(|err| {
285                crate::types::error::Error::from_serde_error(
286                    format_serde_error::SerdeError::new(text.to_string(), err),
287                    status,
288                )
289            })
290        } else {
291            let text = resp.text().await.unwrap_or_default();
292            Err(crate::types::error::Error::Server {
293                body: text.to_string(),
294                status,
295            })
296        }
297    }
298}