diff --git a/cloudflare/src/endpoints/workers/list_schedules.rs b/cloudflare/src/endpoints/workers/list_schedules.rs new file mode 100644 index 00000000..3a3f60dc --- /dev/null +++ b/cloudflare/src/endpoints/workers/list_schedules.rs @@ -0,0 +1,41 @@ +use serde::{Deserialize, Serialize}; + +use super::WorkersSchedule; + +use crate::framework::{ + endpoint::{EndpointSpec, Method}, + response::{ApiResult, ApiSuccess}, +}; + +/// List Schedules +/// +#[derive(Debug)] +pub struct ListSchedules<'a> { + /// Account ID of owner of the script + pub account_identifier: &'a str, + /// The name of the script to list the schedules + pub script_name: &'a str, +} + +#[derive(Debug, Deserialize, Serialize)] +pub struct ListSchedulesResponse { + pub schedules: Vec, +} + +impl ApiResult for ListSchedulesResponse {} + +impl EndpointSpec for ListSchedules<'_> { + type JsonResponse = ListSchedulesResponse; + type ResponseType = ApiSuccess; + + fn method(&self) -> Method { + Method::GET + } + + fn path(&self) -> String { + format!( + "accounts/{}/workers/scripts/{}/schedules", + self.account_identifier, self.script_name + ) + } +} diff --git a/cloudflare/src/endpoints/workers/mod.rs b/cloudflare/src/endpoints/workers/mod.rs index 734a4e85..29038743 100644 --- a/cloudflare/src/endpoints/workers/mod.rs +++ b/cloudflare/src/endpoints/workers/mod.rs @@ -13,9 +13,11 @@ mod delete_secret; mod delete_tail; mod list_bindings; mod list_routes; +mod list_schedules; mod list_secrets; mod list_tails; mod send_tail_heartbeat; +mod update_schedules; pub use create_route::{CreateRoute, CreateRouteParams}; pub use create_secret::{CreateSecret, CreateSecretParams}; @@ -27,9 +29,11 @@ pub use delete_secret::DeleteSecret; pub use delete_tail::DeleteTail; pub use list_bindings::ListBindings; pub use list_routes::ListRoutes; +pub use list_schedules::{ListSchedules, ListSchedulesResponse}; pub use list_secrets::ListSecrets; pub use list_tails::ListTails; pub use send_tail_heartbeat::SendTailHeartbeat; +pub use update_schedules::{UpdateSchedules, UpdateSchedulesResponse}; /// Workers KV Route /// Routes are basic patterns used to enable or disable workers that match requests. @@ -157,6 +161,17 @@ pub enum WorkersBinding { impl ApiResult for WorkersBinding {} impl ApiResult for Vec {} +// Schedule for a Workers Script +#[derive(Deserialize, Serialize, Debug, Clone, PartialEq, Eq, Default, PartialOrd, Ord)] +pub struct WorkersSchedule { + pub cron: Option, + pub created_on: Option, + pub modified_on: Option, +} + +impl ApiResult for WorkersSchedule {} +impl ApiResult for Vec {} + #[cfg(test)] mod tests { use std::collections::VecDeque; diff --git a/cloudflare/src/endpoints/workers/update_schedules.rs b/cloudflare/src/endpoints/workers/update_schedules.rs new file mode 100644 index 00000000..131e0460 --- /dev/null +++ b/cloudflare/src/endpoints/workers/update_schedules.rs @@ -0,0 +1,49 @@ +use serde::Deserialize; + +use super::WorkersSchedule; + +use crate::framework::{ + endpoint::{EndpointSpec, Method, RequestBody}, + response::{ApiResult, ApiSuccess}, +}; + +/// Update Schedules +/// +#[derive(Debug)] +pub struct UpdateSchedules<'a> { + /// Account ID of owner of the script + pub account_identifier: &'a str, + /// Name of the script, used in URLs and route configuration. + pub script_name: &'a str, + /// Schedules to be updated + pub schedules: Vec, +} + +#[derive(Debug, Deserialize)] +pub struct UpdateSchedulesResponse { + pub schedules: Vec, +} + +impl ApiResult for UpdateSchedulesResponse {} + +impl EndpointSpec for UpdateSchedules<'_> { + type JsonResponse = UpdateSchedulesResponse; + type ResponseType = ApiSuccess; + + fn method(&self) -> Method { + Method::PUT + } + + fn path(&self) -> String { + format!( + "accounts/{}/workers/scripts/{}/schedules", + self.account_identifier, self.script_name + ) + } + + #[inline] + fn body(&self) -> Option { + let body = serde_json::to_string(&self.schedules).unwrap(); + Some(RequestBody::Json(body)) + } +}