Skip to main content

fakecloud_cloudfront/
streaming.rs

1//! Data types for CloudFront Batch 4 resources: Streaming Distributions
2//! (legacy RTMP), Field-Level Encryption, Realtime Log Configs.
3//!
4//! Batch 4 ships Streaming Distributions; Field-Level Encryption and
5//! Realtime Log Configs land in subsequent batches as they're independent
6//! resource families.
7
8use chrono::{DateTime, Utc};
9use serde::{Deserialize, Serialize};
10
11fn skip_if_none<T>(x: &Option<T>) -> bool {
12    x.is_none()
13}
14
15// ─── Streaming Distribution (legacy RTMP) ─────────────────────────────
16
17#[derive(Debug, Clone, Serialize, Deserialize, Default)]
18#[serde(rename_all = "PascalCase")]
19pub struct StreamingDistributionConfig {
20    pub caller_reference: String,
21    pub s3_origin: S3Origin,
22    #[serde(default, skip_serializing_if = "skip_if_none")]
23    pub aliases: Option<StreamingAliases>,
24    pub comment: String,
25    #[serde(default, skip_serializing_if = "skip_if_none")]
26    pub logging: Option<StreamingLoggingConfig>,
27    pub trusted_signers: TrustedSigners,
28    pub price_class: String,
29    pub enabled: bool,
30}
31
32#[derive(Debug, Clone, Serialize, Deserialize, Default)]
33#[serde(rename_all = "PascalCase")]
34pub struct S3Origin {
35    pub domain_name: String,
36    pub origin_access_identity: String,
37}
38
39#[derive(Debug, Clone, Serialize, Deserialize, Default)]
40#[serde(rename_all = "PascalCase")]
41pub struct StreamingAliases {
42    pub quantity: i32,
43    #[serde(default, skip_serializing_if = "skip_if_none")]
44    pub items: Option<AliasItems>,
45}
46
47#[derive(Debug, Clone, Serialize, Deserialize, Default)]
48#[serde(rename_all = "PascalCase")]
49pub struct AliasItems {
50    #[serde(default, rename = "CNAME")]
51    pub cname: Vec<String>,
52}
53
54#[derive(Debug, Clone, Serialize, Deserialize, Default)]
55#[serde(rename_all = "PascalCase")]
56pub struct StreamingLoggingConfig {
57    pub enabled: bool,
58    pub bucket: String,
59    pub prefix: String,
60}
61
62#[derive(Debug, Clone, Serialize, Deserialize, Default)]
63#[serde(rename_all = "PascalCase")]
64pub struct TrustedSigners {
65    pub enabled: bool,
66    pub quantity: i32,
67    #[serde(default, skip_serializing_if = "skip_if_none")]
68    pub items: Option<AwsAccountItems>,
69}
70
71#[derive(Debug, Clone, Serialize, Deserialize, Default)]
72#[serde(rename_all = "PascalCase")]
73pub struct AwsAccountItems {
74    #[serde(default, rename = "AwsAccountNumber")]
75    pub aws_account_number: Vec<String>,
76}
77
78#[derive(Debug, Clone, Serialize, Deserialize, Default)]
79#[serde(rename_all = "PascalCase")]
80pub struct StreamingDistributionConfigWithTags {
81    pub streaming_distribution_config: StreamingDistributionConfig,
82    pub tags: crate::model::Tags,
83}
84
85#[derive(Debug, Clone, Serialize, Deserialize)]
86pub struct StoredStreamingDistribution {
87    pub id: String,
88    pub arn: String,
89    pub status: String,
90    pub last_modified_time: DateTime<Utc>,
91    pub domain_name: String,
92    pub etag: String,
93    pub config: StreamingDistributionConfig,
94}