junobuild_cdn/proposals/workflows/
init.rs1use 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}