Skip to main content

junobuild_cdn/storage/state/heap/
state.rs

1use crate::strategies::CdnHeapStrategy;
2use junobuild_collections::msg::msg_storage_collection_not_found;
3use junobuild_collections::types::core::CollectionKey;
4use junobuild_collections::types::rules::Rule;
5use junobuild_shared::types::core::DomainName;
6use junobuild_shared::types::domain::{CustomDomain, CustomDomains};
7use junobuild_storage::types::config::StorageConfig;
8
9// ---------------------------------------------------------
10// Rules
11// ---------------------------------------------------------
12
13pub fn get_rule(
14    cdn_heap: &impl CdnHeapStrategy,
15    collection: &CollectionKey,
16) -> Result<Rule, String> {
17    let rule = cdn_heap.with_rules(|rules| {
18        let rule = rules.get(collection);
19        rule.cloned()
20    });
21
22    match rule {
23        None => Err(msg_storage_collection_not_found(collection)),
24        Some(rule) => Ok(rule),
25    }
26}
27
28// ---------------------------------------------------------
29// Config
30// ---------------------------------------------------------
31
32pub fn get_config(cdn_heap: &impl CdnHeapStrategy) -> StorageConfig {
33    cdn_heap.with_config(|config| config.clone())
34}
35
36pub fn insert_config(cdn_heap: &impl CdnHeapStrategy, config: &StorageConfig) {
37    cdn_heap.with_config_mut(|current_config| insert_config_impl(config, current_config))
38}
39
40fn insert_config_impl(config: &StorageConfig, storage_config: &mut StorageConfig) {
41    *storage_config = config.clone();
42}
43
44// ---------------------------------------------------------
45// Custom domains
46// ---------------------------------------------------------
47
48pub fn get_domains(cdn_heap: &impl CdnHeapStrategy) -> CustomDomains {
49    cdn_heap.with_domains(|domains| domains.clone())
50}
51
52pub fn get_domain(
53    cdn_heap: &impl CdnHeapStrategy,
54    domain_name: &DomainName,
55) -> Option<CustomDomain> {
56    cdn_heap.with_domains(|domains| {
57        let domain = domains.get(domain_name);
58        domain.cloned()
59    })
60}
61
62pub fn insert_domain(
63    cdn_heap: &impl CdnHeapStrategy,
64    domain_name: &DomainName,
65    custom_domain: &CustomDomain,
66) {
67    cdn_heap.with_domains_mut(|domains| insert_domain_impl(domain_name, custom_domain, domains))
68}
69
70fn insert_domain_impl(
71    domain_name: &DomainName,
72    custom_domain: &CustomDomain,
73    domains: &mut CustomDomains,
74) {
75    domains.insert(domain_name.clone(), custom_domain.clone());
76}
77
78pub fn delete_domain(cdn_heap: &impl CdnHeapStrategy, domain_name: &DomainName) {
79    cdn_heap.with_domains_mut(|domains| delete_domain_impl(domain_name, domains))
80}
81
82fn delete_domain_impl(domain_name: &DomainName, domains: &mut CustomDomains) {
83    domains.remove(domain_name);
84}