use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Default, PartialEq, Eq, Hash, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ParserType {
Python,
#[serde(alias = "java_script", rename = "javascript")]
JavaScript,
Rust,
#[default]
Generic,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ProcessState {
Stopped,
Starting,
Building,
Running,
Healthy,
Stopping,
Failed,
ExternallyOwned,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum OutputStream {
Stdout,
Stderr,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct OutputLine {
#[serde(alias = "timestamp")]
pub timestamp: String,
#[serde(alias = "stream")]
pub stream: OutputStream,
#[serde(alias = "line")]
pub line: String,
}
fn default_category() -> String {
"general".to_string()
}
fn default_buffer_size() -> usize {
2000
}
fn default_true() -> bool {
true
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct ProcessConfig {
#[serde(alias = "id")]
pub id: String,
#[serde(alias = "name")]
pub name: String,
#[serde(alias = "command")]
pub command: String,
#[serde(default, alias = "args")]
pub args: Vec<String>,
#[serde(alias = "cwd")]
pub cwd: String,
#[serde(default, alias = "env")]
pub env: HashMap<String, String>,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "health_port"
)]
pub health_port: Option<u16>,
#[serde(default, alias = "parser")]
pub parser: ParserType,
#[serde(default, alias = "auto_start")]
pub auto_start: bool,
#[serde(default = "default_category", alias = "category")]
pub category: String,
#[serde(default = "default_buffer_size", alias = "buffer_size")]
pub buffer_size: usize,
#[serde(default = "default_true", alias = "enabled")]
pub enabled: bool,
#[serde(default, alias = "ignore_patterns")]
pub ignore_patterns: Vec<String>,
#[serde(default, alias = "start_group")]
pub start_group: u32,
#[serde(default, alias = "dev_only")]
pub dev_only: bool,
#[serde(default = "default_true", alias = "rebuild_enabled")]
pub rebuild_enabled: bool,
#[serde(
default,
skip_serializing_if = "Option::is_none",
alias = "build_command"
)]
pub build_command: Option<String>,
#[serde(default, alias = "build_args")]
pub build_args: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[serde(rename_all = "camelCase")]
#[schemars(deny_unknown_fields)]
pub struct ProcessStatus {
#[serde(alias = "id")]
pub id: String,
#[serde(alias = "name")]
pub name: String,
#[serde(alias = "state")]
pub state: ProcessState,
#[serde(alias = "pid")]
pub pid: Option<u32>,
#[serde(alias = "uptime_secs")]
pub uptime_secs: Option<u64>,
#[serde(alias = "port_healthy")]
pub port_healthy: Option<bool>,
#[serde(alias = "restart_count")]
pub restart_count: u32,
#[serde(alias = "error_count")]
pub error_count: u32,
#[serde(alias = "category")]
pub category: String,
#[serde(alias = "has_build_command")]
pub has_build_command: bool,
}