Skip to main content

uptrakit_openapi_client/
scheduler.rs

1use crate::Result;
2use crate::UptrakitClient;
3use crate::types_impl::scheduler::{
4    ScheduledTaskResponse, TriggerScheduledTaskResponse, UpdateScheduledTaskRequest,
5};
6use uuid::Uuid;
7
8impl UptrakitClient {
9    /// List all scheduled tasks.
10    pub async fn list_scheduled_tasks(&self) -> Result<Vec<ScheduledTaskResponse>> {
11        self.get(crate::paths::scheduler::BASE).await
12    }
13
14    /// Get a single scheduled task by ID.
15    pub async fn get_scheduled_task(&self, id: &Uuid) -> Result<ScheduledTaskResponse> {
16        self.get(&crate::paths::scheduler::by_id(id)).await
17    }
18
19    /// Update a scheduled task (interval, jitter, enabled state, or config).
20    pub async fn update_scheduled_task(
21        &self,
22        id: &Uuid,
23        req: &UpdateScheduledTaskRequest,
24    ) -> Result<ScheduledTaskResponse> {
25        self.put_json(&crate::paths::scheduler::by_id(id), req)
26            .await
27    }
28
29    /// Trigger immediate execution of a scheduled task.
30    pub async fn trigger_scheduled_task(&self, id: &Uuid) -> Result<TriggerScheduledTaskResponse> {
31        self.post_empty(&crate::paths::scheduler::trigger(id)).await
32    }
33}
34
35#[cfg(test)]
36mod tests {
37    use crate::types_impl::scheduler::UpdateScheduledTaskRequest;
38
39    #[test]
40    fn update_scheduled_task_request_serialization() {
41        let req = UpdateScheduledTaskRequest {
42            interval_seconds: Some(21600),
43            jitter_seconds: Some(300),
44            enabled: Some(true),
45            task_config: None,
46        };
47        let json = serde_json::to_value(&req).expect("serialize");
48        assert_eq!(json["interval_seconds"], 21600);
49        assert_eq!(json["jitter_seconds"], 300);
50        assert_eq!(json["enabled"], true);
51    }
52
53    #[test]
54    fn update_scheduled_task_request_with_config() {
55        let req = UpdateScheduledTaskRequest {
56            interval_seconds: None,
57            jitter_seconds: None,
58            enabled: None,
59            task_config: Some(serde_json::json!({"key": "value"})),
60        };
61        let json = serde_json::to_value(&req).expect("serialize");
62        assert_eq!(json["task_config"]["key"], "value");
63    }
64}