box_open_sdk/managers/
automate_workflows.rs1use crate::internal::path_escape;
4use crate::runtime::{self, Error};
5
6#[derive(Clone, Debug, Default)]
8pub struct AutomateWorkflowsListOptions {
9 pub limit: Option<i64>,
10 pub marker: Option<String>,
11}
12
13pub 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 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
56pub 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 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}