Skip to main content

box_open_sdk/managers/
automate_workflows.rs

1// Code generated by box-gantry. DO NOT EDIT.
2
3use crate::internal::path_escape;
4use crate::runtime::{self, Error};
5
6/// Optional parameters for [`AutomateWorkflowsManager::list`].
7#[derive(Clone, Debug, Default)]
8pub struct AutomateWorkflowsListOptions {
9    pub limit: Option<i64>,
10    pub marker: Option<String>,
11}
12
13/// Async paginator over [`AutomateWorkflowsManager::list`], yielding one `crate::models::schemas::AutomateWorkflowAction`
14/// per item across pages (FR-7.3).
15pub struct AutomateWorkflowsListPaginator {
16    manager: AutomateWorkflowsManager,
17    folder_id: String,
18    options: AutomateWorkflowsListOptions,
19    buffer: std::vec::IntoIter<crate::models::schemas::AutomateWorkflowAction>,
20    done: bool,
21}
22
23impl AutomateWorkflowsListPaginator {
24    /// The next item, advancing pages as needed; `None` at the end.
25    /// An error is yielded once, then iteration stops.
26    pub async fn next(
27        &mut self,
28    ) -> Option<Result<crate::models::schemas::AutomateWorkflowAction, Error>> {
29        loop {
30            if let Some(item) = self.buffer.next() {
31                return Some(Ok(item));
32            }
33            if self.done {
34                return None;
35            }
36            let page = match self
37                .manager
38                .list_page(self.folder_id.clone(), Some(self.options.clone()))
39                .await
40            {
41                Ok(page) => page,
42                Err(err) => {
43                    self.done = true;
44                    return Some(Err(err));
45                }
46            };
47            self.buffer = page.entries.unwrap_or_default().into_iter();
48            match page.next_marker.flatten() {
49                Some(cursor) if !cursor.is_empty() => self.options.marker = Some(cursor),
50                _ => self.done = true,
51            }
52        }
53    }
54}
55
56/// Operations for the "automate_workflows" API area.
57pub struct AutomateWorkflowsManager {
58    session: std::sync::Arc<runtime::Client>,
59}
60
61impl AutomateWorkflowsManager {
62    pub(crate) fn new(session: std::sync::Arc<runtime::Client>) -> Self {
63        Self { session }
64    }
65
66    async fn list_page(
67        &self,
68        folder_id: String,
69        opts: Option<AutomateWorkflowsListOptions>,
70    ) -> Result<crate::models::schemas::AutomateWorkflows, Error> {
71        let mut url = self.session.base_url("api");
72        url.push_str("/automate_workflows");
73        let mut req = self.session.new_request("GET", &url);
74        req = runtime::with_query(req, "folder_id", &folder_id);
75        let opts = opts.unwrap_or_default();
76        if let Some(value) = opts.limit {
77            req = runtime::with_query(req, "limit", &value.to_string());
78        }
79        if let Some(value) = opts.marker {
80            req = runtime::with_query(req, "marker", &value);
81        }
82        req = runtime::with_header(req, "box-version", "2026.0");
83        let resp = self.session.fetch(req).await?;
84        let data = runtime::response_bytes(&resp)?;
85        Ok(serde_json::from_slice(&data)?)
86    }
87
88    /// Iterate every `crate::models::schemas::AutomateWorkflowAction` across pages, threading the cursor.
89    pub fn list(
90        &self,
91        folder_id: String,
92        opts: Option<AutomateWorkflowsListOptions>,
93    ) -> AutomateWorkflowsListPaginator {
94        AutomateWorkflowsListPaginator {
95            manager: AutomateWorkflowsManager::new(self.session.clone()),
96            folder_id,
97            options: opts.unwrap_or_default(),
98            buffer: Vec::new().into_iter(),
99            done: false,
100        }
101    }
102
103    pub async fn start(
104        &self,
105        workflow_id: String,
106        body: crate::models::schemas::AutomateWorkflowStartRequest,
107    ) -> Result<(), Error> {
108        let mut url = self.session.base_url("api");
109        url.push_str("/automate_workflows");
110        url.push('/');
111        let seg = path_escape(&workflow_id);
112        url.push_str(&seg);
113        url.push_str("/start");
114        let mut req = self.session.new_request("POST", &url);
115        req = runtime::with_header(req, "box-version", "2026.0");
116        let payload = serde_json::to_vec(&body)?;
117        req = runtime::with_json_body(req, &payload);
118        let _ = self.session.fetch(req).await?;
119        Ok(())
120    }
121}