use serde::{Deserialize, Serialize};
use crate::infra::execution::runner::RunnerCapabilities;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct WorkerRegistryRecord {
#[serde(default, skip_serializing_if = "String::is_empty")]
pub office_id: String,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub office_slug: String,
pub node_id: String,
pub label: String,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub base_url: String,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub status: String,
#[serde(default)]
pub capabilities: RunnerCapabilities,
#[serde(default)]
pub registered_at: i64,
#[serde(default)]
pub last_heartbeat_at: i64,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub projects: Vec<OfficeHeldProject>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct OfficeHeldProject {
pub owner: String,
pub project: String,
#[serde(default, skip_serializing_if = "String::is_empty")]
pub title: String,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
pub hidden: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Eq)]
pub struct WorkerRegistrySnapshot {
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub workers: Vec<WorkerRegistryRecord>,
}