cargo-hammerwork 1.15.5

A comprehensive cargo subcommand for managing Hammerwork job queues with webhook management, event streaming, database operations, and advanced monitoring capabilities
Documentation
use anyhow::Result;
use hammerwork::JobPriority;
use std::str::FromStr;

pub fn validate_priority(priority: &str) -> Result<JobPriority> {
    match priority.to_lowercase().as_str() {
        "background" => Ok(JobPriority::Background),
        "low" => Ok(JobPriority::Low),
        "normal" => Ok(JobPriority::Normal),
        "high" => Ok(JobPriority::High),
        "critical" => Ok(JobPriority::Critical),
        _ => Err(anyhow::anyhow!(
            "Invalid priority '{}'. Valid options: background, low, normal, high, critical",
            priority
        )),
    }
}

pub fn validate_status(status: &str) -> Result<()> {
    match status.to_lowercase().as_str() {
        "pending" | "running" | "completed" | "failed" | "dead" | "retrying" | "timed_out" => {
            Ok(())
        }
        _ => Err(anyhow::anyhow!(
            "Invalid status '{}'. Valid options: pending, running, completed, failed, dead, retrying, timed_out",
            status
        )),
    }
}

pub fn validate_json_payload(payload: &str) -> Result<serde_json::Value> {
    serde_json::from_str(payload).map_err(|e| anyhow::anyhow!("Invalid JSON payload: {}", e))
}

pub fn validate_database_url(url: &str) -> Result<()> {
    if url.starts_with("postgres://")
        || url.starts_with("postgresql://")
        || url.starts_with("mysql://")
    {
        Ok(())
    } else {
        Err(anyhow::anyhow!(
            "Invalid database URL. Must start with postgres://, postgresql://, or mysql://"
        ))
    }
}

pub fn validate_cron_expression(cron: &str) -> Result<()> {
    cron::Schedule::from_str(cron)
        .map_err(|e| anyhow::anyhow!("Invalid cron expression '{}': {}", cron, e))?;
    Ok(())
}