junobuild_cdn/proposals/workflows/
init.rs

1use crate::proposals::errors::{
2    JUNO_CDN_PROPOSALS_ERROR_NEXT_ID_CONVERT, JUNO_CDN_PROPOSALS_ERROR_NEXT_ID_OVERFLOW,
3};
4use crate::proposals::{count_proposals, insert_proposal};
5use crate::proposals::{Proposal, ProposalId, ProposalType};
6use crate::strategies::CdnStableStrategy;
7use candid::Principal;
8
9pub fn init_proposal(
10    cdn_stable: &impl CdnStableStrategy,
11    caller: Principal,
12    proposal_type: &ProposalType,
13) -> Result<(ProposalId, Proposal), String> {
14    let proposal_id = u128::try_from(count_proposals(cdn_stable))
15        .map_err(|_| JUNO_CDN_PROPOSALS_ERROR_NEXT_ID_CONVERT.to_string())?
16        .checked_add(1)
17        .ok_or(JUNO_CDN_PROPOSALS_ERROR_NEXT_ID_OVERFLOW.to_string())?;
18
19    let proposal: Proposal = Proposal::init(caller, proposal_type);
20
21    insert_proposal(cdn_stable, &proposal_id, &proposal);
22
23    Ok((proposal_id, proposal))
24}