use std::net::SocketAddr;
#[derive(Debug, Clone, PartialEq, Eq, serde::Deserialize)]
#[serde(deny_unknown_fields)]
pub struct LysConfig {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub drafts: Option<crate::auth_lys::live::drafts::DraftConfig>,
pub issuer: String,
pub network_id: String,
pub keys_path: std::path::PathBuf,
#[serde(default)]
pub live: bool,
#[serde(default)]
pub machine: Option<MachineConfig>,
#[serde(default)]
pub services: Option<LysServicesConfig>,
#[serde(default)]
pub broker: Option<BrokerConfig>,
#[serde(default)]
pub relay: Option<crate::services::relay::RelayConfig>,
#[serde(default)]
pub membership: Option<MembershipConfig>,
#[serde(default)]
pub grant_stream: Option<super::GrantStreamConfig>,
#[serde(default)]
pub agents: Option<crate::agents::config::AgentsConfig>,
#[serde(default)]
pub templates: crate::services::lifecycle::templates::TemplateSources,
#[serde(default)]
pub construction: Option<crate::services::lifecycle::site::ConstructionConfig>,
#[serde(default)]
pub api_url: Option<String>,
#[serde(default)]
pub app_credential_path: Option<std::path::PathBuf>,
}
#[derive(Clone, PartialEq, Eq, serde::Deserialize)]
#[serde(deny_unknown_fields)]
pub struct ServiceTemplateConfig {
pub name: String,
pub command: std::path::PathBuf,
#[serde(default)]
pub args: Vec<String>,
pub subjects: Vec<String>,
#[serde(default)]
pub env: Vec<String>,
pub stop_timeout_ms: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Deserialize)]
#[serde(deny_unknown_fields)]
pub struct MembershipConfig {
pub contract: u32,
pub log_identity: String,
pub log_epoch: u64,
pub workspace_kind: String,
pub channel_kind: String,
pub credential_path: std::path::PathBuf,
pub page_rows: u32,
pub page_bytes: u32,
pub max_decisions: usize,
#[serde(default)]
pub connect_workspace: Option<String>,
pub channels: Vec<MembershipChannelConfig>,
#[serde(default)]
pub conversations: Vec<MembershipConversationConfig>,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Deserialize)]
#[serde(deny_unknown_fields)]
pub struct MembershipChannelConfig {
pub channel: String,
pub workspace: String,
pub resource: String,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Deserialize)]
#[serde(deny_unknown_fields)]
pub struct MembershipConversationConfig {
pub conversation: u64,
pub channel: String,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Deserialize)]
#[serde(deny_unknown_fields)]
pub struct LysServicesConfig {
pub machine: String,
pub host: String,
#[serde(default)]
pub context_watch: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Deserialize)]
#[serde(deny_unknown_fields)]
pub struct BrokerConfig {
pub udp_listen: SocketAddr,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Deserialize)]
#[serde(deny_unknown_fields)]
pub struct MachineConfig {
#[serde(default)]
pub carrier_choice: crate::link_open::ChoiceConfig,
#[serde(default)]
pub parent: Option<String>,
pub identity_path: std::path::PathBuf,
#[serde(default)]
pub pass_path: std::path::PathBuf,
#[serde(default)]
pub agent_id: String,
#[serde(default)]
pub audience: String,
#[serde(default)]
pub machines: std::collections::BTreeMap<String, String>,
#[serde(default)]
pub links: Vec<OutboundLinkConfig>,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Deserialize)]
#[serde(deny_unknown_fields)]
pub struct OutboundLinkConfig {
pub link_id: String,
pub peer_holder: String,
#[serde(default)]
pub peer_address: Option<String>,
pub exports: Vec<String>,
}