junobuild_collections/
store.rs1use crate::assert::rules::{
2 assert_memory, assert_mutable_permissions, assert_storage_reserved_collection,
3 assert_system_collection_delete_permission, assert_system_collection_set_permission,
4 assert_write_version,
5};
6use crate::constants::core::SYS_COLLECTION_PREFIX;
7use crate::types::core::CollectionKey;
8use crate::types::interface::{DelRule, SetRule};
9use crate::types::rules::{Rule, Rules};
10
11pub fn filter_rules(rules: &Rules) -> Vec<(CollectionKey, Rule)> {
16 rules
17 .clone()
18 .into_iter()
19 .filter(|(path, _rules)| (path.starts_with(|c| c != SYS_COLLECTION_PREFIX)))
20 .collect()
21}
22
23pub fn set_rule(
24 collection: CollectionKey,
25 user_rule: SetRule,
26 storage_checks: bool,
27 rules: &mut Rules,
28) -> Result<Rule, String> {
29 let current_rule = rules.get(&collection);
30
31 assert_write_version(current_rule, &user_rule.version)?;
32
33 assert_system_collection_set_permission(&collection, current_rule, &user_rule)?;
34
35 if storage_checks {
36 assert_storage_reserved_collection(&collection, rules)?;
37 }
38
39 assert_memory(current_rule, &user_rule.memory)?;
40 assert_mutable_permissions(current_rule, &user_rule)?;
41
42 let rule: Rule = Rule::prepare(&collection, ¤t_rule, &user_rule)?;
43
44 rules.insert(collection, rule.clone());
45
46 Ok(rule)
47}
48
49pub fn del_rule(
50 collection: CollectionKey,
51 user_rule: DelRule,
52 rules: &mut Rules,
53) -> Result<(), String> {
54 let current_rule = rules.get(&collection);
55
56 assert_write_version(current_rule, &user_rule.version)?;
57
58 assert_system_collection_delete_permission(&collection)?;
59
60 rules.remove(&collection);
61
62 Ok(())
63}