Skip to main content

rustack_cloudfront_core/
store.rs

1//! In-memory store for CloudFront resources.
2//!
3//! Each resource kind is a `DashMap` keyed by ID. Tags are keyed by ARN so a
4//! single `TagResource` / `UntagResource` implementation works across every
5//! taggable resource kind.
6
7use std::sync::Arc;
8
9use dashmap::DashMap;
10use rustack_cloudfront_model::{
11    CachePolicy, CloudFrontFunction, CloudFrontOriginAccessIdentity, Distribution,
12    FieldLevelEncryption, FieldLevelEncryptionProfile, Invalidation, KeyGroup, KeyValueStore,
13    MonitoringSubscription, OriginAccessControl, OriginRequestPolicy, PublicKey, RealtimeLogConfig,
14    ResponseHeadersPolicy, TagSet,
15};
16
17/// In-memory store for all CloudFront resource kinds.
18#[derive(Debug, Default)]
19pub struct CloudFrontStore {
20    /// Distributions, keyed by distribution ID.
21    pub distributions: DashMap<String, Distribution>,
22    /// Invalidations, keyed by `(distribution_id, invalidation_id)`.
23    pub invalidations: DashMap<(String, String), Invalidation>,
24    /// Origin access controls.
25    pub origin_access_controls: DashMap<String, OriginAccessControl>,
26    /// Origin access identities (legacy).
27    pub origin_access_identities: DashMap<String, CloudFrontOriginAccessIdentity>,
28    /// Cache policies (managed + customer).
29    pub cache_policies: DashMap<String, CachePolicy>,
30    /// Origin request policies (managed + customer).
31    pub origin_request_policies: DashMap<String, OriginRequestPolicy>,
32    /// Response headers policies (managed + customer).
33    pub response_headers_policies: DashMap<String, ResponseHeadersPolicy>,
34    /// Key groups.
35    pub key_groups: DashMap<String, KeyGroup>,
36    /// Public keys.
37    pub public_keys: DashMap<String, PublicKey>,
38    /// CloudFront Functions, keyed by function name.
39    pub functions: DashMap<String, CloudFrontFunction>,
40    /// Field-level encryption configs.
41    pub fle_configs: DashMap<String, FieldLevelEncryption>,
42    /// Field-level encryption profiles.
43    pub fle_profiles: DashMap<String, FieldLevelEncryptionProfile>,
44    /// Monitoring subscriptions, keyed by distribution ID.
45    pub monitoring_subscriptions: DashMap<String, MonitoringSubscription>,
46    /// Key-value stores.
47    pub key_value_stores: DashMap<String, KeyValueStore>,
48    /// Realtime log configs, keyed by name.
49    pub realtime_log_configs: DashMap<String, RealtimeLogConfig>,
50    /// Tag sets, keyed by resource ARN.
51    pub tags: DashMap<String, TagSet>,
52}
53
54impl CloudFrontStore {
55    /// Create a new empty store wrapped in `Arc`.
56    #[must_use]
57    pub fn new() -> Arc<Self> {
58        Arc::new(Self::default())
59    }
60}