use serde::{Deserialize, Serialize};
use uuid::Uuid;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum JobKind {
Thumbnail,
Ocr,
Describe,
ExtractTags,
SimilaritySearch,
}
impl JobKind {
pub fn as_str(&self) -> &'static str {
match self {
JobKind::Thumbnail => "thumbnail",
JobKind::Ocr => "ocr",
JobKind::Describe => "describe",
JobKind::ExtractTags => "extract_tags",
JobKind::SimilaritySearch => "similarity_search",
}
}
pub fn from_str(s: &str) -> Option<Self> {
match s {
"thumbnail" | "thumbs" => Some(JobKind::Thumbnail),
"ocr" => Some(JobKind::Ocr),
"describe" => Some(JobKind::Describe),
"extract_tags" | "extract-tags" => Some(JobKind::ExtractTags),
"similarity_search" | "similarity" => Some(JobKind::SimilaritySearch),
_ => None,
}
}
}
/// Envelope sent over RabbitMQ for every job. The kind is duplicated in the
/// routing key but kept here so consumers can re-publish without inspecting
/// AMQP metadata.
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct JobMessage {
pub kind: JobKind,
pub upload_id: Uuid,
pub user_id: Uuid,
/// UUID generated at publish time so workers can dedupe redeliveries
/// across queue restarts.
pub job_id: String,
pub attempt: u32,
}
impl JobMessage {
pub fn new(kind: JobKind, upload_id: Uuid, user_id: Uuid) -> Self {
Self {
kind,
upload_id,
user_id,
job_id: Uuid::new_v4().to_string(),
attempt: 1,
}
}
}
⭐
Log in to mark this repository.
1.7 KiB · text
History
94679c7