junobuild_cdn/storage/state/heap/
state.rs1use 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
9pub 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
28pub 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
44pub 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}