1use alloc::string::String;
4use alloc::vec::Vec;
5
6use semver::Version;
7
8#[cfg(feature = "schemars")]
9use schemars::JsonSchema;
10#[cfg(feature = "serde")]
11use serde::{Deserialize, Serialize};
12use serde_json::Value;
13
14#[derive(Clone, Debug, PartialEq)]
16#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
17#[cfg_attr(feature = "schemars", derive(JsonSchema))]
18pub struct DeploymentPlan {
19 pub pack_id: String,
21 #[cfg_attr(
23 feature = "schemars",
24 schemars(with = "String", description = "SemVer version")
25 )]
26 pub pack_version: Version,
27 pub tenant: String,
29 pub environment: String,
31 pub runners: Vec<RunnerPlan>,
33 #[cfg_attr(
35 feature = "serde",
36 serde(default, skip_serializing_if = "Option::is_none")
37 )]
38 pub messaging: Option<MessagingPlan>,
39 pub channels: Vec<ChannelPlan>,
41 pub secrets: Vec<SecretPlan>,
43 pub oauth: Vec<OAuthPlan>,
45 #[cfg_attr(
47 feature = "serde",
48 serde(default, skip_serializing_if = "Option::is_none")
49 )]
50 pub telemetry: Option<TelemetryPlan>,
51 #[cfg_attr(feature = "serde", serde(default))]
53 pub extra: Value,
54}
55
56#[derive(Clone, Debug, PartialEq)]
58#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
59#[cfg_attr(feature = "schemars", derive(JsonSchema))]
60pub struct RunnerPlan {
61 pub name: String,
63 pub replicas: u32,
65 #[cfg_attr(feature = "serde", serde(default))]
67 pub capabilities: Value,
68}
69
70#[derive(Clone, Debug, PartialEq)]
72#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
73#[cfg_attr(feature = "schemars", derive(JsonSchema))]
74pub struct MessagingPlan {
75 pub logical_cluster: String,
77 pub subjects: Vec<MessagingSubjectPlan>,
79 #[cfg_attr(feature = "serde", serde(default))]
81 pub extra: Value,
82}
83
84#[derive(Clone, Debug, PartialEq)]
86#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
87#[cfg_attr(feature = "schemars", derive(JsonSchema))]
88pub struct MessagingSubjectPlan {
89 pub name: String,
91 pub purpose: String,
93 pub durable: bool,
95 #[cfg_attr(feature = "serde", serde(default))]
97 pub extra: Value,
98}
99
100#[derive(Clone, Debug, PartialEq)]
102#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
103#[cfg_attr(feature = "schemars", derive(JsonSchema))]
104pub struct ChannelPlan {
105 pub name: String,
107 pub flow_id: String,
109 pub kind: String,
111 #[cfg_attr(feature = "serde", serde(default))]
113 pub config: Value,
114}
115
116#[derive(Clone, Debug, PartialEq, Eq)]
118#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
119#[cfg_attr(feature = "schemars", derive(JsonSchema))]
120pub struct SecretPlan {
121 pub key: String,
123 pub required: bool,
125 pub scope: String,
127}
128
129#[derive(Clone, Debug, PartialEq)]
131#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
132#[cfg_attr(feature = "schemars", derive(JsonSchema))]
133pub struct OAuthPlan {
134 pub provider_id: String,
136 pub logical_client_id: String,
138 pub redirect_path: String,
140 #[cfg_attr(feature = "serde", serde(default))]
142 pub extra: Value,
143}
144
145#[derive(Clone, Debug, PartialEq)]
147#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
148#[cfg_attr(feature = "schemars", derive(JsonSchema))]
149pub struct TelemetryPlan {
150 pub required: bool,
152 #[cfg_attr(
154 feature = "serde",
155 serde(default, skip_serializing_if = "Option::is_none")
156 )]
157 pub suggested_endpoint: Option<String>,
158 #[cfg_attr(feature = "serde", serde(default))]
160 pub extra: Value,
161}