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::rules::{Memory, Permission};
64 use candid::CandidType;
65 use junobuild_shared::rate::types::RateConfig;
66 use junobuild_shared::types::state::Version;
67 use serde::Deserialize;
68
69 #[derive(CandidType, Deserialize, Clone)]
70 pub struct SetRule {
71 pub read: Permission,
72 pub write: Permission,
73 pub mutable_permissions: Option<bool>,
74 pub memory: Option<Memory>,
75 pub max_size: Option<u128>,
76 pub max_capacity: Option<u32>,
77 pub max_changes_per_user: Option<u32>,
78 pub version: Option<Version>,
79 pub rate_config: Option<RateConfig>,
80 }
81
82 #[derive(Default, CandidType, Deserialize, Clone)]
83 pub struct DelRule {
84 pub version: Option<Version>,
85 }
86}