use alloc::string::String;
use alloc::vec::Vec;
use crate::SecretRequirement;
use semver::Version;
#[cfg(feature = "schemars")]
use schemars::JsonSchema;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Clone, Debug, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct DeploymentPlan {
pub pack_id: String,
#[cfg_attr(
feature = "schemars",
schemars(with = "String", description = "SemVer version")
)]
pub pack_version: Version,
pub tenant: String,
pub environment: String,
pub runners: Vec<RunnerPlan>,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub messaging: Option<MessagingPlan>,
pub channels: Vec<ChannelPlan>,
pub secrets: Vec<SecretRequirement>,
pub oauth: Vec<OAuthPlan>,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub telemetry: Option<TelemetryPlan>,
#[cfg_attr(feature = "serde", serde(default))]
pub extra: Value,
}
#[derive(Clone, Debug, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct RunnerPlan {
pub name: String,
pub replicas: u32,
#[cfg_attr(feature = "serde", serde(default))]
pub capabilities: Value,
}
#[derive(Clone, Debug, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct MessagingPlan {
pub logical_cluster: String,
pub subjects: Vec<MessagingSubjectPlan>,
#[cfg_attr(feature = "serde", serde(default))]
pub extra: Value,
}
#[derive(Clone, Debug, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct MessagingSubjectPlan {
pub name: String,
pub purpose: String,
pub durable: bool,
#[cfg_attr(feature = "serde", serde(default))]
pub extra: Value,
}
#[derive(Clone, Debug, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct ChannelPlan {
pub name: String,
pub flow_id: String,
pub kind: String,
#[cfg_attr(feature = "serde", serde(default))]
pub config: Value,
}
#[derive(Clone, Debug, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct OAuthPlan {
pub provider_id: String,
pub logical_client_id: String,
pub redirect_path: String,
#[cfg_attr(feature = "serde", serde(default))]
pub extra: Value,
}
#[derive(Clone, Debug, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[cfg_attr(feature = "schemars", derive(JsonSchema))]
pub struct TelemetryPlan {
pub required: bool,
#[cfg_attr(
feature = "serde",
serde(default, skip_serializing_if = "Option::is_none")
)]
pub suggested_endpoint: Option<String>,
#[cfg_attr(feature = "serde", serde(default))]
pub extra: Value,
}