use crate::error::Result;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use typed_builder::TypedBuilder;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ScheduledJob {
pub job_id: String,
pub name: String,
pub job_type: String,
pub schedule: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub enabled: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub last_run: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub next_run: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub params: Option<Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize, TypedBuilder)]
pub struct CreateScheduledJobRequest {
#[builder(setter(into))]
pub name: String,
#[builder(setter(into))]
pub job_type: String,
#[builder(setter(into))]
pub schedule: String,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub enabled: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub params: Option<Value>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct JobExecution {
pub execution_id: String,
pub job_id: String,
pub start_time: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub end_time: Option<String>,
pub status: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub error: Option<String>,
}
define_handler!(
pub struct JobSchedulerHandler;
);
impl JobSchedulerHandler {
pub async fn get_config(&self) -> Result<Value> {
self.client.get("/v1/job_scheduler").await
}
pub async fn update_config(&self, body: Value) -> Result<Value> {
self.client.put("/v1/job_scheduler", &body).await
}
#[deprecated(note = "use get_config")]
pub async fn list(&self) -> Result<Vec<ScheduledJob>> {
crate::error::unsupported_operation("list scheduled jobs")
}
#[deprecated(note = "Redis Software does not register per-job scheduler routes")]
pub async fn get(&self, _job_id: &str) -> Result<ScheduledJob> {
crate::error::unsupported_operation("get scheduled job")
}
#[deprecated(note = "Redis Software does not register per-job scheduler routes")]
pub async fn delete(&self, _job_id: &str) -> Result<()> {
crate::error::unsupported_operation("delete scheduled job")
}
#[deprecated(note = "Redis Software does not register POST /v1/job_scheduler")]
pub async fn create(&self, _request: CreateScheduledJobRequest) -> Result<ScheduledJob> {
crate::error::unsupported_operation("create scheduled job")
}
#[deprecated(note = "Redis Software does not register per-job scheduler routes")]
pub async fn update(
&self,
_job_id: &str,
_request: CreateScheduledJobRequest,
) -> Result<ScheduledJob> {
crate::error::unsupported_operation("update scheduled job")
}
#[deprecated(note = "Redis Software does not register per-job scheduler routes")]
pub async fn trigger(&self, _job_id: &str) -> Result<JobExecution> {
crate::error::unsupported_operation("trigger scheduled job")
}
#[deprecated(note = "Redis Software does not register per-job scheduler routes")]
pub async fn history(&self, _job_id: &str) -> Result<Vec<JobExecution>> {
crate::error::unsupported_operation("get scheduled-job history")
}
#[deprecated(note = "use update_config")]
pub async fn update_all(&self, _body: Value) -> Result<Vec<ScheduledJob>> {
crate::error::unsupported_operation("update scheduler with legacy response model")
}
}