use crate::task::HeaderMap;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type", content = "data")]
pub enum ClientMessage {
#[serde(rename = "enqueue")]
Enqueue(EnqueueRequest),
#[serde(rename = "enqueue_unique")]
EnqueueUnique(EnqueueUniqueRequest),
#[serde(rename = "schedule")]
Schedule(ScheduleRequest),
#[serde(rename = "schedule_unique")]
ScheduleUnique(ScheduleUniqueRequest),
#[serde(rename = "dequeue")]
Dequeue(DequeueRequest),
#[serde(rename = "done")]
Done(TaskDoneRequest),
#[serde(rename = "mark_complete")]
MarkComplete(TaskDoneRequest),
#[serde(rename = "retry")]
Retry(RetryRequest),
#[serde(rename = "archive")]
Archive(ArchiveRequest),
#[serde(rename = "ping")]
Ping,
#[serde(rename = "subscribe_cancellation")]
SubscribeCancellation,
#[serde(rename = "publish_cancellation")]
PublishCancellation { task_id: String },
#[serde(rename = "add_to_group")]
AddToGroup(AddToGroupRequest),
#[serde(rename = "add_to_group_unique")]
AddToGroupUnique(AddToGroupUniqueRequest),
#[serde(rename = "list_groups")]
ListGroups(ListGroupsRequest),
#[serde(rename = "aggregation_check")]
AggregationCheck(AggregationCheckRequest),
#[serde(rename = "read_aggregation_set")]
ReadAggregationSet(ReadAggregationSetRequest),
#[serde(rename = "delete_aggregation_set")]
DeleteAggregationSet(DeleteAggregationSetRequest),
#[serde(rename = "list_lease_expired")]
ListLeaseExpired(ListLeaseExpiredRequest),
#[serde(rename = "extend_lease")]
ExtendLease(ExtendLeaseRequest),
#[serde(rename = "write_server_state")]
WriteServerState(WriteServerStateRequest),
#[serde(rename = "clear_server_state")]
ClearServerState(ClearServerStateRequest),
#[serde(rename = "write_result")]
WriteResult(WriteResultRequest),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "type", content = "data")]
pub enum ServerMessage {
#[serde(rename = "task_info")]
TaskInfo(TaskInfoResponse),
#[serde(rename = "dequeue_result")]
DequeueResult(Option<TaskMessageResponse>),
#[serde(rename = "success")]
Success,
#[serde(rename = "pong")]
Pong,
#[serde(rename = "error")]
Error { message: String },
#[serde(rename = "cancellation")]
Cancellation { task_id: String },
#[serde(rename = "groups_list")]
GroupsList(Vec<String>),
#[serde(rename = "aggregation_set_id")]
AggregationSetId(Option<String>),
#[serde(rename = "aggregation_set")]
AggregationSet(Vec<TaskMessageResponse>),
#[serde(rename = "lease_expired_tasks")]
LeaseExpiredTasks(Vec<TaskMessageResponse>),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EnqueueRequest {
pub task_type: String,
pub payload: String,
#[serde(default)]
#[serde(with = "http_serde::header_map")]
pub headers: HeaderMap,
pub queue: Option<String>,
pub max_retry: Option<i32>,
pub task_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct EnqueueUniqueRequest {
#[serde(flatten)]
pub enqueue: EnqueueRequest,
pub ttl_seconds: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ScheduleRequest {
#[serde(flatten)]
pub enqueue: EnqueueRequest,
pub process_at: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ScheduleUniqueRequest {
#[serde(flatten)]
pub schedule: ScheduleRequest,
pub ttl_seconds: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DequeueRequest {
pub queues: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaskDoneRequest {
pub task_id: String,
pub queue: String,
pub task_type: String,
pub payload: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RetryRequest {
#[serde(flatten)]
pub task: TaskDoneRequest,
pub process_at: i64,
pub error_msg: String,
pub is_failure: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ArchiveRequest {
#[serde(flatten)]
pub task: TaskDoneRequest,
pub error_msg: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AddToGroupRequest {
#[serde(flatten)]
pub enqueue: EnqueueRequest,
pub group: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AddToGroupUniqueRequest {
#[serde(flatten)]
pub enqueue: EnqueueRequest,
pub group: String,
pub ttl_seconds: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListGroupsRequest {
pub queue: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AggregationCheckRequest {
pub queue: String,
pub group: String,
pub aggregation_delay_seconds: u64,
pub max_delay_seconds: u64,
pub max_size: usize,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ReadAggregationSetRequest {
pub queue: String,
pub group: String,
pub set_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DeleteAggregationSetRequest {
pub queue: String,
pub group: String,
pub set_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaskInfoResponse {
pub id: String,
pub queue: String,
pub task_type: String,
pub state: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaskMessageResponse {
pub id: String,
pub queue: String,
pub task_type: String,
pub payload: String,
#[serde(with = "http_serde::header_map")]
pub headers: HeaderMap,
pub retry: i32,
pub retried: i32,
pub error_msg: String,
pub timeout: i64,
pub deadline: i64,
pub group_key: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ListLeaseExpiredRequest {
pub cutoff: i64,
pub queues: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ExtendLeaseRequest {
pub queue: String,
pub task_id: String,
pub lease_duration_seconds: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WriteServerStateRequest {
pub host: String,
pub pid: i32,
pub server_id: String,
pub concurrency: i32,
pub queues: HashMap<String, i32>,
pub strict_priority: bool,
pub status: String,
pub active_worker_count: i32,
pub ttl_seconds: u64,
pub workers: Vec<WorkerInfoData>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WorkerInfoData {
pub host: String,
pub pid: i32,
pub server_id: String,
pub task_id: String,
pub task_type: String,
pub task_payload: String,
pub queue: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ClearServerStateRequest {
pub host: String,
pub pid: i32,
pub server_id: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct WriteResultRequest {
pub queue: String,
pub task_id: String,
pub result: String,
}