Skip to main content

fakecloud_cloudfront/
functions.rs

1//! Data types for CloudFront Batch 3 resources: Functions, Public Keys,
2//! Key Groups, Key Value Stores, Origin Access Identities (legacy),
3//! Monitoring Subscriptions.
4
5use chrono::{DateTime, Utc};
6use serde::{Deserialize, Serialize};
7
8fn skip_if_none<T>(x: &Option<T>) -> bool {
9    x.is_none()
10}
11
12// ─── CloudFront Function ──────────────────────────────────────────────
13
14#[derive(Debug, Clone, Serialize, Deserialize, Default)]
15#[serde(rename_all = "PascalCase")]
16pub struct FunctionConfig {
17    #[serde(default, skip_serializing_if = "skip_if_none")]
18    pub comment: Option<String>,
19    pub runtime: String,
20    #[serde(default, skip_serializing_if = "skip_if_none")]
21    pub key_value_store_associations: Option<KeyValueStoreAssociations>,
22}
23
24#[derive(Debug, Clone, Serialize, Deserialize, Default)]
25#[serde(rename_all = "PascalCase")]
26pub struct KeyValueStoreAssociations {
27    pub quantity: i32,
28    #[serde(default, skip_serializing_if = "skip_if_none")]
29    pub items: Option<KeyValueStoreAssociationItems>,
30}
31
32#[derive(Debug, Clone, Serialize, Deserialize, Default)]
33#[serde(rename_all = "PascalCase")]
34pub struct KeyValueStoreAssociationItems {
35    #[serde(default, rename = "KeyValueStoreAssociation")]
36    pub key_value_store_association: Vec<KeyValueStoreAssociation>,
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize, Default)]
40#[serde(rename_all = "PascalCase")]
41pub struct KeyValueStoreAssociation {
42    pub key_value_store_arn: String,
43}
44
45#[derive(Debug, Clone, Serialize, Deserialize)]
46pub struct StoredFunction {
47    pub name: String,
48    pub etag: String,
49    pub status: String,
50    /// "DEVELOPMENT" or "LIVE"
51    pub stage: String,
52    pub function_arn: String,
53    pub created_time: DateTime<Utc>,
54    pub last_modified_time: DateTime<Utc>,
55    pub config: FunctionConfig,
56    /// Function source code (base64-encoded as the API receives it).
57    pub function_code: String,
58}
59
60// ─── Public Key ───────────────────────────────────────────────────────
61
62#[derive(Debug, Clone, Serialize, Deserialize, Default)]
63#[serde(rename_all = "PascalCase")]
64pub struct PublicKeyConfig {
65    pub caller_reference: String,
66    pub name: String,
67    pub encoded_key: String,
68    #[serde(default, skip_serializing_if = "skip_if_none")]
69    pub comment: Option<String>,
70}
71
72#[derive(Debug, Clone, Serialize, Deserialize)]
73pub struct StoredPublicKey {
74    pub id: String,
75    pub etag: String,
76    pub created_time: DateTime<Utc>,
77    pub config: PublicKeyConfig,
78}
79
80// ─── Key Group ────────────────────────────────────────────────────────
81
82#[derive(Debug, Clone, Serialize, Deserialize, Default)]
83#[serde(rename_all = "PascalCase")]
84pub struct KeyGroupConfig {
85    pub name: String,
86    pub items: KeyGroupItems,
87    #[serde(default, skip_serializing_if = "skip_if_none")]
88    pub comment: Option<String>,
89}
90
91#[derive(Debug, Clone, Serialize, Deserialize, Default)]
92#[serde(rename_all = "PascalCase")]
93pub struct KeyGroupItems {
94    #[serde(default, rename = "PublicKey")]
95    pub public_key: Vec<String>,
96}
97
98#[derive(Debug, Clone, Serialize, Deserialize)]
99pub struct StoredKeyGroup {
100    pub id: String,
101    pub etag: String,
102    pub last_modified_time: DateTime<Utc>,
103    pub config: KeyGroupConfig,
104}
105
106// ─── Key Value Store ──────────────────────────────────────────────────
107
108#[derive(Debug, Clone, Serialize, Deserialize, Default)]
109#[serde(rename_all = "PascalCase")]
110pub struct ImportSource {
111    #[serde(default)]
112    pub source_type: String,
113    #[serde(default)]
114    pub source_arn: String,
115}
116
117#[derive(Debug, Clone, Serialize, Deserialize)]
118pub struct StoredKeyValueStore {
119    pub name: String,
120    pub id: String,
121    pub etag: String,
122    pub arn: String,
123    pub status: String,
124    pub created_time: DateTime<Utc>,
125    pub last_modified_time: DateTime<Utc>,
126    pub comment: Option<String>,
127    pub import_source: Option<ImportSource>,
128}
129
130// ─── Origin Access Identity (legacy) ──────────────────────────────────
131
132#[derive(Debug, Clone, Serialize, Deserialize, Default)]
133#[serde(rename_all = "PascalCase")]
134pub struct CloudFrontOriginAccessIdentityConfig {
135    pub caller_reference: String,
136    pub comment: String,
137}
138
139#[derive(Debug, Clone, Serialize, Deserialize)]
140pub struct StoredOriginAccessIdentity {
141    pub id: String,
142    pub etag: String,
143    pub s3_canonical_user_id: String,
144    pub config: CloudFrontOriginAccessIdentityConfig,
145}
146
147// ─── Monitoring Subscription ──────────────────────────────────────────
148
149#[derive(Debug, Clone, Serialize, Deserialize, Default)]
150#[serde(rename_all = "PascalCase")]
151pub struct MonitoringSubscriptionBody {
152    pub realtime_metrics_subscription_config: RealtimeMetricsSubscriptionConfig,
153}
154
155#[derive(Debug, Clone, Serialize, Deserialize, Default)]
156#[serde(rename_all = "PascalCase")]
157pub struct RealtimeMetricsSubscriptionConfig {
158    pub realtime_metrics_subscription_status: String,
159}
160
161#[derive(Debug, Clone, Serialize, Deserialize)]
162pub struct StoredMonitoringSubscription {
163    pub distribution_id: String,
164    pub config: RealtimeMetricsSubscriptionConfig,
165}