use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(tag = "kind", rename_all = "snake_case")]
pub enum WireLiveHotSwapSkipReason {
NoOpOrOverride,
IdentityLookupFailed { error: String },
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct WireLiveHotSwapSkip {
pub session_id: String,
pub reason: WireLiveHotSwapSkipReason,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct WireLiveSwapFailure {
pub session_id: String,
pub error: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(tag = "kind", rename_all = "snake_case")]
pub enum WireLiveChannelRefreshFailure {
OpenConfigBuildFailed { error: String },
SnapshotVersionFailed { error: String },
EnqueueFailed { error: String },
QueueAcceptanceRejected { error: String },
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct WireLiveRefreshFailure {
pub session_id: String,
pub failure: WireLiveChannelRefreshFailure,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(tag = "kind", rename_all = "snake_case")]
pub enum WireLiveChannelCloseFailure {
SignalFailed { error: String },
CloseAuthorityRejected { error: String },
CommitHandoffMissing,
HostCommitFailed { error: String },
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct WireLiveCloseFailure {
pub session_id: String,
pub failure: WireLiveChannelCloseFailure,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct WireLiveConfigPropagationReport {
pub clean: bool,
pub swapped: Vec<String>,
pub skipped: Vec<WireLiveHotSwapSkip>,
pub swap_failed: Vec<WireLiveSwapFailure>,
pub refreshed: Vec<String>,
pub closed: Vec<String>,
pub refresh_failed: Vec<WireLiveRefreshFailure>,
pub close_failed: Vec<WireLiveCloseFailure>,
}
#[cfg(not(target_arch = "wasm32"))]
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct ConfigWriteResult {
#[serde(flatten)]
pub envelope: meerkat_core::ConfigEnvelope,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub live_propagation: Option<WireLiveConfigPropagationReport>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(untagged)]
pub enum ConfigSetParams {
Wrapped {
#[cfg_attr(feature = "schema", schemars(with = "Value"))]
config: meerkat_core::Config,
#[serde(default, skip_serializing_if = "Option::is_none")]
expected_generation: Option<u64>,
},
Direct(#[cfg_attr(feature = "schema", schemars(with = "Value"))] meerkat_core::Config),
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct ConfigPatchParams {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub patch: Option<Value>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub expected_generation: Option<u64>,
}