pitchfork-cli 2.14.0

Daemons with DX
Documentation
use serde::Serialize;

#[derive(Serialize)]
pub struct JsonListEntry {
    pub id: String,
    pub namespace: String,
    pub name: String,
    pub pid: Option<u32>,
    pub status: String,
    pub disabled: bool,
    pub available: bool,
    pub proxy_url: Option<String>,
    pub error: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub active_port: Option<u16>,
    pub port: Vec<u16>,
}

#[derive(Serialize)]
pub struct JsonStatusEntry {
    pub id: String,
    pub namespace: String,
    pub name: String,
    pub pid: Option<u32>,
    pub status: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub active_port: Option<u16>,
    pub port: Vec<u16>,
    pub proxy_url: Option<String>,
}

#[derive(Serialize)]
pub struct JsonLogEntry {
    pub timestamp: String,
    pub daemon_id: String,
    pub message: String,
}

#[derive(Serialize)]
pub struct JsonDaemonConfigEntry {
    pub id: String,
    pub run: String,
}

#[derive(Serialize)]
pub struct JsonProxyStatus {
    pub enabled: bool,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub scheme: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub tld: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub port: Option<u16>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub lan: Option<JsonLanInfo>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub tls_cert: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub trusted: Option<bool>,
    pub slugs: Vec<JsonSlugEntry>,
}

#[derive(Serialize)]
pub struct JsonLanInfo {
    pub enabled: bool,
    pub ip: String,
}

#[derive(Serialize)]
pub struct JsonSlugEntry {
    pub slug: String,
    pub url: String,
    pub dir: String,
    pub daemon: String,
    pub status: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub port: Option<u16>,
}

#[derive(Serialize)]
pub struct JsonSettingEntry {
    pub key: String,
    pub value: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub default: Option<&'static str>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub r#type: Option<&'static str>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub env_var: Option<&'static str>,
}

pub fn print_json<T: Serialize>(value: &T) -> crate::Result<()> {
    let json = serde_json::to_string_pretty(value)
        .map_err(|e| miette::miette!("failed to serialize JSON: {e}"))?;
    println!("{json}");
    Ok(())
}