1use crate::json_value::JsonValue;
2use serde::Serialize;
3use std::collections::HashMap;
4
5#[derive(Debug, Clone, Serialize)]
8#[cfg_attr(feature = "wasm-bindings", derive(tsify::Tsify))]
9#[cfg_attr(feature = "uniffi-bindings", derive(uniffi::Record))]
10#[serde(rename_all = "camelCase")]
11pub struct DiagnosticModel {
12 pub template: DiagnosticTemplate,
13 #[cfg_attr(feature = "wasm-bindings", tsify(type = "Record<string, JsonValue>"))]
14 pub parameters: HashMap<String, JsonValue>,
15 #[cfg_attr(feature = "wasm-bindings", tsify(type = "Record<string, DiagnosticCondition>"))]
16 pub conditions: HashMap<String, DiagnosticCondition>,
17 pub condition_param_refs: Vec<String>,
19 pub condition_implications: Vec<DiagnosticImplication>,
21 pub condition_mutex_groups: Vec<DiagnosticMutexGroup>,
23 pub condition_exclusions: Vec<Vec<String>>,
25 #[cfg_attr(feature = "wasm-bindings", tsify(type = "Record<string, string>"))]
27 pub resource_condition_map: HashMap<String, String>,
28 pub mappings: JsonValue,
29 #[cfg_attr(feature = "wasm-bindings", tsify(type = "Record<string, DiagnosticResource>"))]
30 pub resources: HashMap<String, DiagnosticResource>,
31 #[cfg_attr(feature = "wasm-bindings", tsify(type = "Record<string, DiagnosticOutput>"))]
32 pub outputs: HashMap<String, DiagnosticOutput>,
33 pub edges: Vec<ReferenceEdge>,
34 pub cycles: Vec<Vec<String>>,
36 pub output_empty_joins: Vec<String>,
38 pub sam_implicit_resources: Vec<String>,
40 pub globals_param_refs: Vec<String>,
42 pub is_cdk: bool,
44 pub fn_if_conditions: Vec<String>,
46 pub find_in_map_names: Vec<String>,
48 pub params_referenced_in_definitions: Vec<String>,
50 pub has_dynamic_findinmap_name: bool,
52 pub has_parse_errors: bool,
54 pub parsed_rules: Vec<DiagnosticRule>,
56 pub resolution_sources: Vec<ResolutionSource>,
58}
59
60#[derive(Debug, Clone, Serialize)]
62#[cfg_attr(feature = "wasm-bindings", derive(tsify::Tsify))]
63#[cfg_attr(feature = "uniffi-bindings", derive(uniffi::Record))]
64#[serde(rename_all = "camelCase")]
65pub struct DiagnosticTemplate {
66 #[cfg_attr(feature = "wasm-bindings", tsify(optional))]
67 #[cfg_attr(feature = "uniffi-bindings", uniffi(default))]
68 pub format_version: Option<String>,
69 #[cfg_attr(feature = "wasm-bindings", tsify(optional))]
70 #[cfg_attr(feature = "uniffi-bindings", uniffi(default))]
71 pub description: Option<String>,
72 pub transforms: Vec<String>,
73 pub raw_top_level_keys: Vec<String>,
75}
76
77#[derive(Debug, Clone, Serialize)]
79#[cfg_attr(feature = "wasm-bindings", derive(tsify::Tsify))]
80#[cfg_attr(feature = "uniffi-bindings", derive(uniffi::Record))]
81#[serde(rename_all = "camelCase")]
82pub struct DiagnosticCondition {
83 #[serde(skip_serializing_if = "Option::is_none")]
85 #[cfg_attr(feature = "uniffi-bindings", uniffi(default))]
86 pub expression: Option<String>,
87 #[serde(skip_serializing_if = "Option::is_none")]
89 #[cfg_attr(feature = "uniffi-bindings", uniffi(default))]
90 pub deps: Option<Vec<String>>,
91 #[serde(skip_serializing_if = "Option::is_none")]
93 #[cfg_attr(feature = "uniffi-bindings", uniffi(default))]
94 pub mutex_with: Option<Vec<String>>,
95}
96
97#[derive(Debug, Clone, Serialize)]
99#[cfg_attr(feature = "wasm-bindings", derive(tsify::Tsify))]
100#[cfg_attr(feature = "uniffi-bindings", derive(uniffi::Record))]
101#[serde(rename_all = "camelCase")]
102pub struct DiagnosticImplication {
103 pub antecedent: String,
104 pub consequent: String,
105}
106
107#[derive(Debug, Clone, Serialize)]
109#[cfg_attr(feature = "wasm-bindings", derive(tsify::Tsify))]
110#[cfg_attr(feature = "uniffi-bindings", derive(uniffi::Record))]
111#[serde(rename_all = "camelCase")]
112pub struct DiagnosticMutexGroup {
113 pub conditions: Vec<String>,
114 pub parameter: String,
116 pub values: Vec<String>,
118}
119
120#[derive(Debug, Clone, Serialize)]
122#[cfg_attr(feature = "wasm-bindings", derive(tsify::Tsify))]
123#[cfg_attr(feature = "uniffi-bindings", derive(uniffi::Record))]
124#[serde(rename_all = "camelCase")]
125pub struct ReferenceEdge {
126 pub source: String,
128 pub source_path: String,
130 pub target: String,
132 pub kind: String,
134 #[serde(skip_serializing_if = "Option::is_none")]
136 #[cfg_attr(feature = "uniffi-bindings", uniffi(default))]
137 pub attr: Option<String>,
138 #[serde(skip_serializing_if = "Option::is_none")]
140 #[cfg_attr(feature = "uniffi-bindings", uniffi(default))]
141 pub condition_context: Option<String>,
142}
143
144#[derive(Debug, Clone, Serialize)]
146#[cfg_attr(feature = "wasm-bindings", derive(tsify::Tsify))]
147#[cfg_attr(feature = "uniffi-bindings", derive(uniffi::Record))]
148#[serde(rename_all = "camelCase")]
149pub struct OutgoingRef {
150 pub source_path: String,
152 pub target: String,
154 pub kind: String,
156 #[serde(skip_serializing_if = "Option::is_none")]
158 #[cfg_attr(feature = "uniffi-bindings", uniffi(default))]
159 pub attr: Option<String>,
160 #[serde(skip_serializing_if = "Option::is_none")]
162 #[cfg_attr(feature = "uniffi-bindings", uniffi(default))]
163 pub condition_context: Option<String>,
164}
165
166#[derive(Debug, Clone, Serialize)]
168#[cfg_attr(feature = "wasm-bindings", derive(tsify::Tsify))]
169#[cfg_attr(feature = "uniffi-bindings", derive(uniffi::Record))]
170#[serde(rename_all = "camelCase")]
171pub struct IncomingRef {
172 pub source: String,
174 pub source_path: String,
176 pub kind: String,
178 #[serde(skip_serializing_if = "Option::is_none")]
180 #[cfg_attr(feature = "uniffi-bindings", uniffi(default))]
181 pub attr: Option<String>,
182}
183
184#[derive(Debug, Clone, Serialize)]
186#[cfg_attr(feature = "wasm-bindings", derive(tsify::Tsify))]
187#[cfg_attr(feature = "uniffi-bindings", derive(uniffi::Record))]
188#[serde(rename_all = "camelCase")]
189pub struct DiagnosticResource {
190 pub resource_type: String,
191 #[cfg_attr(feature = "wasm-bindings", tsify(optional))]
193 #[cfg_attr(feature = "uniffi-bindings", uniffi(default))]
194 pub condition: Option<String>,
195 pub depends_on: Vec<String>,
196 #[cfg_attr(feature = "wasm-bindings", tsify(optional))]
197 #[cfg_attr(feature = "uniffi-bindings", uniffi(default))]
198 pub deletion_policy: Option<JsonValue>,
199 #[cfg_attr(feature = "wasm-bindings", tsify(optional))]
200 #[cfg_attr(feature = "uniffi-bindings", uniffi(default))]
201 pub update_replace_policy: Option<JsonValue>,
202 #[cfg_attr(feature = "wasm-bindings", tsify(optional))]
203 #[cfg_attr(feature = "uniffi-bindings", uniffi(default))]
204 pub creation_policy: Option<JsonValue>,
205 #[cfg_attr(feature = "wasm-bindings", tsify(optional))]
206 #[cfg_attr(feature = "uniffi-bindings", uniffi(default))]
207 pub update_policy: Option<JsonValue>,
208 #[cfg_attr(feature = "wasm-bindings", tsify(type = "Record<string, JsonValue>"))]
210 pub properties: HashMap<String, JsonValue>,
211 pub outgoing_refs: Vec<OutgoingRef>,
212 pub incoming_refs: Vec<IncomingRef>,
213 pub find_in_map_refs: Vec<String>,
215 pub simple_subs: Vec<PathVariable>,
217 pub redundant_subs: Vec<String>,
219 pub empty_joins: Vec<String>,
221 pub hardcoded_partition_arns: Vec<String>,
223 pub conditionally_null_props: Vec<ConditionalNull>,
225 pub condition_refs: Vec<String>,
227 pub for_each_expansions: Vec<DiagnosticForEachExpansion>,
229 pub unsubstituted_variables: Vec<PathVariable>,
231 pub unused_sub_keys: Vec<PathVariable>,
233 pub raw_pseudo_params: Vec<PathVariable>,
235 pub secretsmanager_ref_paths: Vec<String>,
237 pub invalid_refs: Vec<PathTarget>,
239}
240
241#[derive(Debug, Clone, Serialize)]
243#[cfg_attr(feature = "wasm-bindings", derive(tsify::Tsify))]
244#[cfg_attr(feature = "uniffi-bindings", derive(uniffi::Record))]
245pub struct PathVariable {
246 pub path: String,
247 pub variable: String,
248}
249
250#[derive(Debug, Clone, Serialize)]
252#[cfg_attr(feature = "wasm-bindings", derive(tsify::Tsify))]
253#[cfg_attr(feature = "uniffi-bindings", derive(uniffi::Record))]
254#[serde(rename_all = "camelCase")]
255pub struct ConditionalNull {
256 pub path: String,
257 pub condition: String,
258 pub null_in_true: bool,
260}
261
262#[derive(Debug, Clone, Serialize)]
264#[cfg_attr(feature = "wasm-bindings", derive(tsify::Tsify))]
265#[cfg_attr(feature = "uniffi-bindings", derive(uniffi::Record))]
266pub struct DiagnosticForEachExpansion {
267 pub path: String,
269 pub identifier: String,
271 pub collection: String,
273}
274
275#[derive(Debug, Clone, Serialize)]
277#[cfg_attr(feature = "wasm-bindings", derive(tsify::Tsify))]
278#[cfg_attr(feature = "uniffi-bindings", derive(uniffi::Record))]
279pub struct PathTarget {
280 pub path: String,
281 pub target: String,
282}
283
284#[derive(Debug, Clone, Serialize)]
286#[cfg_attr(feature = "wasm-bindings", derive(tsify::Tsify))]
287#[cfg_attr(feature = "uniffi-bindings", derive(uniffi::Record))]
288#[serde(rename_all = "camelCase")]
289pub struct GetAttRef {
290 pub resource: String,
292 pub attribute: String,
293}
294
295#[derive(Debug, Clone, Serialize)]
297#[cfg_attr(feature = "wasm-bindings", derive(tsify::Tsify))]
298#[cfg_attr(feature = "uniffi-bindings", derive(uniffi::Record))]
299#[serde(rename_all = "camelCase")]
300pub struct DiagnosticOutput {
301 pub value: JsonValue,
303 #[cfg_attr(feature = "wasm-bindings", tsify(optional))]
304 #[cfg_attr(feature = "uniffi-bindings", uniffi(default))]
305 pub description: Option<String>,
306 #[cfg_attr(feature = "wasm-bindings", tsify(optional))]
308 #[cfg_attr(feature = "uniffi-bindings", uniffi(default))]
309 pub condition: Option<String>,
310 #[cfg_attr(feature = "wasm-bindings", tsify(optional))]
311 #[cfg_attr(feature = "uniffi-bindings", uniffi(default))]
312 pub export_name: Option<JsonValue>,
313 pub getatt_refs: Vec<GetAttRef>,
315 pub condition_refs: Vec<String>,
317}
318
319#[derive(Debug, Clone, Serialize)]
321#[cfg_attr(feature = "wasm-bindings", derive(tsify::Tsify))]
322#[cfg_attr(feature = "uniffi-bindings", derive(uniffi::Record))]
323#[serde(rename_all = "camelCase")]
324pub struct DiagnosticRule {
325 pub name: String,
326 #[cfg_attr(feature = "wasm-bindings", tsify(optional))]
328 #[cfg_attr(feature = "uniffi-bindings", uniffi(default))]
329 pub condition: Option<JsonValue>,
330 pub assertions: Vec<DiagnosticRuleAssertion>,
331}
332
333#[derive(Debug, Clone, Serialize)]
335#[cfg_attr(feature = "wasm-bindings", derive(tsify::Tsify))]
336#[cfg_attr(feature = "uniffi-bindings", derive(uniffi::Record))]
337#[serde(rename_all = "camelCase")]
338pub struct DiagnosticRuleAssertion {
339 pub assert_expr: JsonValue,
341 #[serde(skip_serializing_if = "Option::is_none")]
342 #[cfg_attr(feature = "uniffi-bindings", uniffi(default))]
343 pub assert_description: Option<String>,
344}
345
346#[derive(Debug, Clone, Serialize)]
348#[cfg_attr(feature = "wasm-bindings", derive(tsify::Tsify))]
349#[cfg_attr(feature = "uniffi-bindings", derive(uniffi::Record))]
350#[serde(rename_all = "camelCase")]
351pub struct ResolutionSource {
352 pub resource_id: String,
353 pub property_path: String,
354 pub source: String,
356}