cronback_client/
triggers.rs1use cronback_api_model::{
2 Paginated,
3 Pagination,
4 Run,
5 RunMode,
6 RunTrigger,
7 TriggersFilter,
8};
9use http::Method;
10
11use crate::client::RequestRunner;
12use crate::{Response, Result, Trigger};
13
14pub async fn create_from_json(
23 client: &impl RequestRunner,
24 trigger_req: serde_json::Value,
25) -> Result<Response<Trigger>> {
26 let path = client.make_url("/v1/triggers")?;
27 client.run_with_body(Method::POST, path, trigger_req).await
28}
29pub async fn get<T>(
31 client: &impl RequestRunner,
32 name: T,
33) -> Result<Response<Trigger>>
34where
35 T: AsRef<str>,
36{
37 let path = client.make_url(&format!("/v1/triggers/{}", name.as_ref()))?;
38 client.run(Method::GET, path).await
39}
40
41pub async fn list(
43 client: &impl RequestRunner,
44 pagination: Option<Pagination>,
45 filter: Option<TriggersFilter>,
46) -> Result<Response<Paginated<Trigger>>> {
47 let mut path = client.make_url("/v1/triggers")?;
48 if let Some(pagination) = pagination {
49 if let Some(cursor) = pagination.cursor {
50 path.query_pairs_mut().append_pair("cursor", &cursor);
51 }
52 if let Some(limit) = pagination.limit {
53 path.query_pairs_mut()
54 .append_pair("limit", &limit.to_string());
55 }
56 }
57
58 if let Some(filter) = filter {
59 for status in filter.status {
60 path.query_pairs_mut()
61 .append_pair("status", &status.to_string());
62 }
63 }
64
65 client.run(Method::GET, path).await
66}
67
68pub async fn cancel<T>(
70 client: &impl RequestRunner,
71 name: T,
72) -> Result<Response<Trigger>>
73where
74 T: AsRef<str>,
75{
76 let path = format!("/v1/triggers/{}/cancel", name.as_ref());
77 let path = client.make_url(&path)?;
78
79 client.run(Method::POST, path).await
80}
81
82pub async fn pause<T>(
84 client: &impl RequestRunner,
85 name: T,
86) -> Result<Response<Trigger>>
87where
88 T: AsRef<str>,
89{
90 let path = format!("/v1/triggers/{}/pause", name.as_ref());
91 let path = client.make_url(&path)?;
92
93 client.run(Method::POST, path).await
94}
95
96pub async fn resume<T>(
98 client: &impl RequestRunner,
99 name: T,
100) -> Result<Response<Trigger>>
101where
102 T: AsRef<str>,
103{
104 let path = format!("/v1/triggers/{}/resume", name.as_ref());
105 let path = client.make_url(&path)?;
106
107 client.run(Method::POST, path).await
108}
109
110pub async fn run<T>(
112 client: &impl RequestRunner,
113 name: T,
114 mode: RunMode,
115) -> Result<Response<Run>>
116where
117 T: AsRef<str>,
118{
119 let path = format!("/v1/triggers/{}/run", name.as_ref());
120 let path = client.make_url(&path)?;
121
122 let body = RunTrigger { mode };
123
124 client.run_with_body(Method::POST, path, body).await
125}
126
127pub async fn delete<T>(
129 client: &impl RequestRunner,
130 name: T,
131) -> Result<Response<()>>
132where
133 T: AsRef<str>,
134{
135 let path = format!("/v1/triggers/{}", name.as_ref());
136 let path = client.make_url(&path)?;
137
138 client.run(Method::DELETE, path).await
139}