use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use crate::tags::TagSet;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
pub enum ResourceStatus {
#[default]
InProgress,
Deployed,
Completed,
}
impl ResourceStatus {
#[must_use]
pub fn as_wire(self) -> &'static str {
match self {
Self::InProgress => "InProgress",
Self::Deployed => "Deployed",
Self::Completed => "Completed",
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Distribution {
pub id: String,
pub arn: String,
pub status: ResourceStatus,
pub last_modified_time: DateTime<Utc>,
pub domain_name: String,
pub in_progress_invalidation_batches: i32,
pub active_trusted_signers_enabled: bool,
pub active_trusted_key_groups_enabled: bool,
pub config: DistributionConfig,
pub tags: TagSet,
pub etag: String,
pub alias_icp_recordal: Vec<AliasIcpRecordal>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct AliasIcpRecordal {
pub cname: String,
pub icp_recordal_status: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DistributionConfig {
pub caller_reference: String,
pub aliases: Vec<String>,
pub default_root_object: String,
pub origins: Vec<Origin>,
pub origin_groups: Vec<OriginGroup>,
pub default_cache_behavior: CacheBehavior,
pub cache_behaviors: Vec<CacheBehavior>,
pub custom_error_responses: Vec<CustomErrorResponse>,
pub comment: String,
pub logging: LoggingConfig,
pub price_class: String,
pub enabled: bool,
pub viewer_certificate: ViewerCertificate,
pub restrictions: Restrictions,
pub web_acl_id: String,
pub http_version: String,
pub is_ipv6_enabled: bool,
pub continuous_deployment_policy_id: String,
pub staging: bool,
pub anycast_ip_list_id: String,
pub connection_mode: String,
pub tenant_config_parameters: Vec<TenantConfigParameter>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Origin {
pub id: String,
pub domain_name: String,
pub origin_path: String,
pub custom_headers: Vec<CustomHeader>,
pub s3_origin_config: Option<S3OriginConfig>,
pub custom_origin_config: Option<CustomOriginConfig>,
pub connection_attempts: i32,
pub connection_timeout: i32,
pub origin_shield: Option<OriginShield>,
pub origin_access_control_id: String,
pub vpc_origin_config: Option<VpcOriginConfig>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct S3OriginConfig {
pub origin_access_identity: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CustomOriginConfig {
pub http_port: i32,
pub https_port: i32,
pub origin_protocol_policy: String,
pub origin_ssl_protocols: Vec<String>,
pub origin_read_timeout: i32,
pub origin_keepalive_timeout: i32,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct VpcOriginConfig {
pub vpc_origin_id: String,
pub origin_read_timeout: i32,
pub origin_keepalive_timeout: i32,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct OriginShield {
pub enabled: bool,
pub origin_shield_region: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct OriginGroup {
pub id: String,
pub failover_status_codes: Vec<i32>,
pub member_origins: Vec<String>,
pub selection_criteria: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CustomHeader {
pub header_name: String,
pub header_value: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CacheBehavior {
pub path_pattern: String,
pub target_origin_id: String,
pub viewer_protocol_policy: String,
pub allowed_methods: Vec<String>,
pub cached_methods: Vec<String>,
pub smooth_streaming: bool,
pub compress: bool,
pub field_level_encryption_id: String,
pub realtime_log_config_arn: String,
pub cache_policy_id: String,
pub origin_request_policy_id: String,
pub response_headers_policy_id: String,
pub grpc_enabled: bool,
pub trusted_signers: Vec<String>,
pub trusted_signers_enabled: bool,
pub trusted_key_groups: Vec<String>,
pub trusted_key_groups_enabled: bool,
pub lambda_function_associations: Vec<LambdaFunctionAssociation>,
pub function_associations: Vec<FunctionAssociation>,
pub forwarded_values: Option<ForwardedValues>,
pub min_ttl: i64,
pub default_ttl: i64,
pub max_ttl: i64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct LambdaFunctionAssociation {
pub lambda_function_arn: String,
pub event_type: String,
pub include_body: bool,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct FunctionAssociation {
pub function_arn: String,
pub event_type: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ForwardedValues {
pub query_string: bool,
pub cookies: CookiePreference,
pub headers: Vec<String>,
pub query_string_cache_keys: Vec<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CookiePreference {
pub forward: String,
pub whitelisted_names: Vec<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CustomErrorResponse {
pub error_code: i32,
pub response_page_path: String,
pub response_code: String,
pub error_caching_min_ttl: i64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct LoggingConfig {
pub enabled: bool,
pub include_cookies: bool,
pub bucket: String,
pub prefix: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ViewerCertificate {
pub cloud_front_default_certificate: bool,
pub acm_certificate_arn: String,
pub iam_certificate_id: String,
pub minimum_protocol_version: String,
pub ssl_support_method: String,
pub certificate: String,
pub certificate_source: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Restrictions {
pub geo_restriction: GeoRestriction,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct GeoRestriction {
pub restriction_type: String,
pub locations: Vec<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct TenantConfigParameter {
pub name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Invalidation {
pub id: String,
pub status: ResourceStatus,
pub create_time: DateTime<Utc>,
pub distribution_id: String,
pub batch: InvalidationBatch,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct InvalidationBatch {
pub paths: Vec<String>,
pub caller_reference: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OriginAccessControl {
pub id: String,
pub config: OriginAccessControlConfig,
pub etag: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct OriginAccessControlConfig {
pub name: String,
pub description: String,
pub signing_protocol: String,
pub signing_behavior: String,
pub origin_access_control_origin_type: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CloudFrontOriginAccessIdentity {
pub id: String,
pub s3_canonical_user_id: String,
pub config: CloudFrontOriginAccessIdentityConfig,
pub etag: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CloudFrontOriginAccessIdentityConfig {
pub caller_reference: String,
pub comment: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CachePolicy {
pub id: String,
pub last_modified_time: DateTime<Utc>,
pub config: CachePolicyConfig,
pub etag: String,
pub managed: bool,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CachePolicyConfig {
pub comment: String,
pub name: String,
pub default_ttl: i64,
pub max_ttl: i64,
pub min_ttl: i64,
pub parameters_in_cache_key_and_forwarded_to_origin: ParamsInCacheKey,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ParamsInCacheKey {
pub enable_accept_encoding_gzip: bool,
pub enable_accept_encoding_brotli: bool,
pub headers_config: CachePolicyHeadersConfig,
pub cookies_config: CachePolicyCookiesConfig,
pub query_strings_config: CachePolicyQueryStringsConfig,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CachePolicyHeadersConfig {
pub header_behavior: String,
pub headers: Vec<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CachePolicyCookiesConfig {
pub cookie_behavior: String,
pub cookies: Vec<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CachePolicyQueryStringsConfig {
pub query_string_behavior: String,
pub query_strings: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct OriginRequestPolicy {
pub id: String,
pub last_modified_time: DateTime<Utc>,
pub config: OriginRequestPolicyConfig,
pub etag: String,
pub managed: bool,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct OriginRequestPolicyConfig {
pub comment: String,
pub name: String,
pub headers_config: OriginRequestPolicyHeadersConfig,
pub cookies_config: OriginRequestPolicyCookiesConfig,
pub query_strings_config: OriginRequestPolicyQueryStringsConfig,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct OriginRequestPolicyHeadersConfig {
pub header_behavior: String,
pub headers: Vec<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct OriginRequestPolicyCookiesConfig {
pub cookie_behavior: String,
pub cookies: Vec<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct OriginRequestPolicyQueryStringsConfig {
pub query_string_behavior: String,
pub query_strings: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResponseHeadersPolicy {
pub id: String,
pub last_modified_time: DateTime<Utc>,
pub config: ResponseHeadersPolicyConfig,
pub etag: String,
pub managed: bool,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ResponseHeadersPolicyConfig {
pub comment: String,
pub name: String,
pub cors_config: Option<ResponseHeadersPolicyCorsConfig>,
pub security_headers_config: Option<ResponseHeadersPolicySecurityHeadersConfig>,
pub server_timing_headers_config: Option<ServerTimingHeadersConfig>,
pub custom_headers_config: Vec<ResponseHeaderOverride>,
pub remove_headers_config: Vec<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ResponseHeadersPolicyCorsConfig {
pub access_control_allow_credentials: bool,
pub access_control_allow_origins: Vec<String>,
pub access_control_allow_headers: Vec<String>,
pub access_control_allow_methods: Vec<String>,
pub access_control_expose_headers: Vec<String>,
pub access_control_max_age_sec: i64,
pub origin_override: bool,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ResponseHeadersPolicySecurityHeadersConfig {
pub xss_protection: Option<XssProtection>,
pub frame_options: Option<FrameOptions>,
pub referrer_policy: Option<ReferrerPolicy>,
pub content_security_policy: Option<ContentSecurityPolicy>,
pub content_type_options: Option<ContentTypeOptions>,
pub strict_transport_security: Option<StrictTransportSecurity>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct XssProtection {
pub protection: bool,
pub mode_block: bool,
pub override_upstream: bool,
pub report_uri: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct FrameOptions {
pub frame_option: String,
pub override_upstream: bool,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ReferrerPolicy {
pub referrer_policy: String,
pub override_upstream: bool,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ContentSecurityPolicy {
pub content_security_policy: String,
pub override_upstream: bool,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ContentTypeOptions {
pub override_upstream: bool,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct StrictTransportSecurity {
pub override_upstream: bool,
pub include_subdomains: bool,
pub preload: bool,
pub access_control_max_age_sec: i64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ServerTimingHeadersConfig {
pub enabled: bool,
pub sampling_rate: f64,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ResponseHeaderOverride {
pub header: String,
pub value: String,
pub override_upstream: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct KeyGroup {
pub id: String,
pub last_modified_time: DateTime<Utc>,
pub config: KeyGroupConfig,
pub etag: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct KeyGroupConfig {
pub name: String,
pub items: Vec<String>,
pub comment: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PublicKey {
pub id: String,
pub created_time: DateTime<Utc>,
pub config: PublicKeyConfig,
pub etag: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct PublicKeyConfig {
pub caller_reference: String,
pub name: String,
pub encoded_key: String,
pub comment: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CloudFrontFunction {
pub name: String,
pub arn: String,
pub last_modified_time: DateTime<Utc>,
pub stage: String,
pub metadata: FunctionMetadata,
pub config: FunctionConfig,
pub code: Vec<u8>,
pub etag: String,
pub status: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct FunctionConfig {
pub comment: String,
pub runtime: String,
pub key_value_store_associations: Vec<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FunctionMetadata {
pub function_arn: String,
pub stage: String,
pub created_time: DateTime<Utc>,
pub last_modified_time: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FieldLevelEncryption {
pub id: String,
pub last_modified_time: DateTime<Utc>,
pub config: FieldLevelEncryptionConfig,
pub etag: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct FieldLevelEncryptionConfig {
pub caller_reference: String,
pub comment: String,
pub query_arg_profile_config_enabled: bool,
pub content_type_profile_config_enabled: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FieldLevelEncryptionProfile {
pub id: String,
pub last_modified_time: DateTime<Utc>,
pub config: FieldLevelEncryptionProfileConfig,
pub etag: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct FieldLevelEncryptionProfileConfig {
pub name: String,
pub caller_reference: String,
pub comment: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MonitoringSubscription {
pub distribution_id: String,
pub realtime_metrics_subscription_status: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct KeyValueStore {
pub id: String,
pub name: String,
pub arn: String,
pub comment: String,
pub status: String,
pub last_modified_time: DateTime<Utc>,
pub etag: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RealtimeLogConfig {
pub arn: String,
pub name: String,
pub sampling_rate: i64,
pub end_points: Vec<EndPoint>,
pub fields: Vec<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct EndPoint {
pub stream_type: String,
pub kinesis_stream_config: KinesisStreamConfig,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct KinesisStreamConfig {
pub role_arn: String,
pub stream_arn: String,
}