junobuild_collections/
types.rs1pub mod core {
2 pub type CollectionKey = String;
9}
10
11pub mod rules {
12 use crate::types::core::CollectionKey;
13 use candid::CandidType;
14 use junobuild_shared::rate::types::RateConfig;
15 use junobuild_shared::serializers::deserialize_default_as_true;
16 use junobuild_shared::types::state::Timestamp;
17 use junobuild_shared::types::state::Version;
18 use serde::{Deserialize, Serialize};
19 use std::collections::HashMap;
20
21 pub type Rules = HashMap<CollectionKey, Rule>;
22
23 #[derive(CandidType, Serialize, Deserialize, Clone)]
24 pub struct Rule {
25 pub read: Permission,
26 pub write: Permission,
27 #[serde(default = "deserialize_default_as_true")]
28 pub mutable_permissions: Option<bool>,
29 pub memory: Option<Memory>,
30 pub max_size: Option<u128>,
31 pub max_capacity: Option<u32>,
32 pub max_changes_per_user: Option<u32>,
33 pub created_at: Timestamp,
34 pub updated_at: Timestamp,
35 pub version: Option<Version>,
36 pub rate_config: Option<RateConfig>,
37 }
38
39 #[derive(CandidType, Serialize, Deserialize, Default, Clone, PartialEq)]
40 pub enum Memory {
41 #[default]
45 Heap,
46 Stable,
47 }
48
49 #[derive(CandidType, Serialize, Deserialize, Clone, PartialEq)]
50 pub enum Permission {
51 Public,
53 Private,
55 Managed,
57 Controllers,
59 }
60}
61
62pub mod interface {
63 use crate::types::core::CollectionKey;
64 use crate::types::rules::{Memory, Permission, Rule};
65 use candid::CandidType;
66 use junobuild_shared::rate::types::RateConfig;
67 use junobuild_shared::types::state::Version;
68 use serde::Deserialize;
69
70 #[derive(CandidType, Deserialize, Clone)]
71 pub struct SetRule {
72 pub read: Permission,
73 pub write: Permission,
74 pub mutable_permissions: Option<bool>,
75 pub memory: Option<Memory>,
76 pub max_size: Option<u128>,
77 pub max_capacity: Option<u32>,
78 pub max_changes_per_user: Option<u32>,
79 pub version: Option<Version>,
80 pub rate_config: Option<RateConfig>,
81 }
82
83 #[derive(Default, CandidType, Deserialize, Clone)]
84 pub struct DelRule {
85 pub version: Option<Version>,
86 }
87
88 #[derive(Default, CandidType, Deserialize, Clone)]
89 pub struct ListRulesParams {
90 pub matcher: Option<ListRulesMatcher>,
91 }
92
93 #[derive(Default, CandidType, Deserialize, Clone)]
94 pub struct ListRulesMatcher {
95 pub include_system: bool,
96 }
97
98 #[derive(Default, CandidType, Deserialize, Clone)]
99 pub struct ListRulesResults {
100 pub items: Vec<(CollectionKey, Rule)>,
101 pub items_length: usize,
102 pub matches_length: usize,
103 }
104}