use indexmap::IndexMap;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "laboratories.daemon.IdentifyMount")]
pub struct IdentifyMount {
pub host: String,
pub container: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "laboratories.daemon.Identify")]
pub struct Identify {
pub id: String,
pub image: crate::laboratories::LaboratoryImage,
pub mounts: Vec<IdentifyMount>,
pub env: Vec<[String; 2]>,
pub cwd: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[schemars(extend("omitempty" = true))]
pub created_at: Option<i64>,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[schemars(extend("omitempty" = true))]
pub agent_full_id: Option<String>,
#[serde(default)]
pub running: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "laboratories.daemon.HostIdentify")]
pub struct HostIdentify {
pub state: String,
pub machine: crate::machine::MachineIdentity,
pub laboratories: Vec<Identify>,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "laboratories.daemon.ChannelRequest")]
pub struct ChannelRequest {
pub id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[schemars(extend("omitempty" = true))]
pub laboratory_id: Option<String>,
pub headers: IndexMap<String, String>,
pub payload: super::RequestPayload,
}
#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "laboratories.daemon.ChannelResponse")]
pub struct ChannelResponse {
pub id: String,
pub payload: super::ResponsePayload,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
#[schemars(rename = "laboratories.daemon.HostNotification")]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum HostNotification {
#[schemars(title = "LaboratoryCreated")]
LaboratoryCreated { laboratory: Identify },
#[schemars(title = "LaboratoryUpdated")]
LaboratoryUpdated { laboratory: Identify },
#[schemars(title = "LaboratoryDeleted")]
LaboratoryDeleted { id: String },
#[schemars(title = "LaboratoryFiletree")]
LaboratoryFiletree {
id: String,
event: crate::laboratories::filetree::FileTreeEvent,
},
}