pub mod core {
pub type CollectionKey = String;
}
pub mod rules {
use crate::types::core::CollectionKey;
use candid::CandidType;
use junobuild_shared::memory::serializers::deserialize_default_as_true;
use junobuild_shared::rate::types::RateConfig;
use junobuild_shared::types::state::Timestamp;
use junobuild_shared::types::state::Version;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
pub type Rules = HashMap<CollectionKey, Rule>;
#[derive(CandidType, Serialize, Deserialize, Clone)]
pub struct Rule {
pub read: Permission,
pub write: Permission,
#[serde(default = "deserialize_default_as_true")]
pub mutable_permissions: Option<bool>,
pub memory: Option<Memory>,
pub max_size: Option<u128>,
pub max_capacity: Option<u32>,
pub max_changes_per_user: Option<u32>,
pub created_at: Timestamp,
pub updated_at: Timestamp,
pub version: Option<Version>,
pub rate_config: Option<RateConfig>,
}
#[derive(CandidType, Serialize, Deserialize, Default, Clone, PartialEq)]
pub enum Memory {
#[default]
Heap,
Stable,
}
#[derive(CandidType, Serialize, Deserialize, Clone, PartialEq)]
pub enum Permission {
Public,
Private,
Managed,
Controllers,
}
}
pub mod interface {
use crate::types::core::CollectionKey;
use crate::types::rules::{Memory, Permission, Rule};
use candid::CandidType;
use junobuild_shared::rate::types::RateConfig;
use junobuild_shared::types::state::Version;
use serde::Deserialize;
#[derive(CandidType, Deserialize, Clone)]
pub struct SetRule {
pub read: Permission,
pub write: Permission,
pub mutable_permissions: Option<bool>,
pub memory: Option<Memory>,
pub max_size: Option<u128>,
pub max_capacity: Option<u32>,
pub max_changes_per_user: Option<u32>,
pub version: Option<Version>,
pub rate_config: Option<RateConfig>,
}
#[derive(Default, CandidType, Deserialize, Clone)]
pub struct DelRule {
pub version: Option<Version>,
}
#[derive(Default, CandidType, Deserialize, Clone)]
pub struct ListRulesParams {
pub matcher: Option<ListRulesMatcher>,
}
#[derive(Default, CandidType, Deserialize, Clone)]
pub struct ListRulesMatcher {
pub include_system: bool,
}
#[derive(Default, CandidType, Deserialize, Clone)]
pub struct ListRulesResults {
pub items: Vec<(CollectionKey, Rule)>,
pub items_length: usize,
pub matches_length: usize,
}
}