junobuild-cdn 0.7.1

CDN logic for serving assets in Juno, backed by a request-based storage process.
Documentation
use candid::{CandidType, Deserialize, Principal};
use ic_stable_structures::StableBTreeMap;
use junobuild_shared::types::core::Hash;
use junobuild_shared::types::memory::Memory;
use junobuild_shared::types::state::{Timestamp, Version};
use serde::Serialize;

pub type ProposalsStable = StableBTreeMap<ProposalKey, Proposal, Memory>;

pub type ProposalId = u128;

#[derive(CandidType, Serialize, Deserialize, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct ProposalKey {
    pub proposal_id: ProposalId,
}

#[derive(CandidType, Serialize, Deserialize, Clone)]
pub struct Proposal {
    pub owner: Principal,
    pub sha256: Option<Hash>,
    pub status: ProposalStatus,
    pub executed_at: Option<Timestamp>,
    pub created_at: Timestamp,
    pub updated_at: Timestamp,
    pub version: Option<Version>,
    pub proposal_type: ProposalType,
}

#[derive(CandidType, Serialize, Deserialize, Clone)]
pub enum ProposalType {
    AssetsUpgrade(AssetsUpgradeOptions),
    SegmentsDeployment(SegmentsDeploymentOptions),
}

#[derive(CandidType, Serialize, Deserialize, Clone)]
pub struct AssetsUpgradeOptions {
    pub clear_existing_assets: Option<bool>,
}

pub type SegmentDeploymentVersion = String;

#[derive(CandidType, Serialize, Deserialize, Clone)]
pub struct SegmentsDeploymentOptions {
    pub satellite_version: Option<SegmentDeploymentVersion>,
    pub mission_control_version: Option<SegmentDeploymentVersion>,
    pub orbiter: Option<SegmentDeploymentVersion>,
}

#[derive(CandidType, Serialize, Deserialize, Clone, Debug, PartialEq)]
pub enum ProposalStatus {
    Initialized,
    Open,
    Rejected,
    Accepted,
    Executed,
    Failed,
}

#[derive(CandidType, Deserialize, Clone)]
pub struct ListProposalsParams {
    pub paginate: Option<ListProposalsPaginate>,
    pub order: Option<ListProposalsOrder>,
}

#[derive(Default, CandidType, Deserialize, Clone)]
pub struct ListProposalsPaginate {
    pub start_after: Option<ProposalId>,
    pub limit: Option<u128>,
}

#[derive(Default, CandidType, Deserialize, Clone)]
pub struct ListProposalsOrder {
    pub desc: bool,
}

#[derive(Default, CandidType, Deserialize, Clone)]
pub struct ListProposalResults {
    pub items: Vec<(ProposalKey, Proposal)>,
    pub items_length: usize,
    pub matches_length: usize,
}