junobuild-cdn 0.7.2

CDN logic for serving assets in Juno, backed by a request-based storage process.
Documentation
use crate::proposals::errors::{
    JUNO_CDN_PROPOSALS_ERROR_NEXT_ID_CONVERT, JUNO_CDN_PROPOSALS_ERROR_NEXT_ID_OVERFLOW,
};
use crate::proposals::{count_proposals, insert_proposal};
use crate::proposals::{Proposal, ProposalId, ProposalType};
use crate::strategies::CdnStableStrategy;
use candid::Principal;

pub fn init_proposal(
    cdn_stable: &impl CdnStableStrategy,
    caller: Principal,
    proposal_type: &ProposalType,
) -> Result<(ProposalId, Proposal), String> {
    let proposal_id = u128::try_from(count_proposals(cdn_stable))
        .map_err(|_| JUNO_CDN_PROPOSALS_ERROR_NEXT_ID_CONVERT.to_string())?
        .checked_add(1)
        .ok_or(JUNO_CDN_PROPOSALS_ERROR_NEXT_ID_OVERFLOW.to_string())?;

    let proposal: Proposal = Proposal::init(caller, proposal_type);

    insert_proposal(cdn_stable, &proposal_id, &proposal);

    Ok((proposal_id, proposal))
}