use serde::{Deserialize, Serialize};
use serde_json::Value;
use super::service::ServiceStatus;
pub const DAEMON_SERVICE: &str = "daemon";
pub const MAX_LINE_BYTES: usize = 1024 * 1024;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DaemonEnvelope {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub service: Option<String>,
pub op: String,
#[serde(default, skip_serializing_if = "Value::is_null")]
pub payload: Value,
}
impl DaemonEnvelope {
pub fn service(name: impl Into<String>, op: impl Into<String>, payload: Value) -> Self {
Self {
service: Some(name.into()),
op: op.into(),
payload,
}
}
pub fn builtin(op: impl Into<String>) -> Self {
Self {
service: None,
op: op.into(),
payload: Value::Null,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DaemonReply {
pub ok: bool,
#[serde(default, skip_serializing_if = "Value::is_null")]
pub payload: Value,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub error: Option<String>,
}
impl DaemonReply {
pub fn ok(payload: Value) -> Self {
Self {
ok: true,
payload,
error: None,
}
}
pub fn err(message: impl Into<String>) -> Self {
Self {
ok: false,
payload: Value::Null,
error: Some(message.into()),
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct StatusReport {
pub services: Vec<ServiceStatus>,
}