1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
pub use super::*;

pub use frame_support::{
	codec::{Decode, Encode},
	traits::Currency,
	RuntimeDebug,
};

use scale_info::{prelude::boxed::Box, TypeInfo};

pub type AccountIdOf<T> = <T as frame_system::Config>::AccountId;
pub type BalanceOf<T> = <<T as Config>::LocalCurrency as Currency<AccountIdOf<T>>>::Balance;
pub type BlockNumberOf<T> = <T as frame_system::Config>::BlockNumber;

#[derive(Clone, Encode, Decode, PartialEq, RuntimeDebug, TypeInfo)]
#[scale_info(skip_type_params(T))]
pub struct ProposalParams<T: Config> {
	pub call: Box<<T as Config>::Call>,
	pub hash: T::Hash,
}

#[derive(Clone, Encode, Decode, PartialEq, RuntimeDebug, TypeInfo)]
#[scale_info(skip_type_params(T))]
pub struct CollectiveParams<T: Config, U> {
	pub call_pass: Box<<T as Config>::Call>,
	pub call_fail: Box<<T as Config>::Call>,
	pub index: u32,
	pub call: U,
	pub hash: T::Hash,
}

#[derive(Clone, Encode, Decode, PartialEq, RuntimeDebug, TypeInfo)]
#[scale_info(skip_type_params(T))]
pub struct DemocracyParams<T: Config> {
	pub call_fail: Box<<T as Config>::Call>,
	pub hash: T::Hash,
}

#[derive(Clone, Encode, Decode, PartialEq, RuntimeDebug, TypeInfo)]
#[scale_info(skip_type_params(T))]
pub struct VotingProposal<T: Config, U> {
	pub account_id: AccountIdOf<T>,
	pub proposal_call: Box<<T as Config>::Call>,
	pub proposal_hash: T::Hash,
	pub collective_call: U,
	pub collective_passed_call: Box<<T as Config>::Call>,
	pub collective_failed_call: Box<<T as Config>::Call>,
	pub collective_index: u32,
	pub collective_hash: T::Hash,
	pub collective_step: bool,
	pub collective_closed: bool,
	pub democracy_failed_call: Box<<T as Config>::Call>,
	pub democracy_referendum_index: u32,
	pub democracy_hash: T::Hash,
	pub proposal_executed: bool,
}
impl<T: Config, U> VotingProposal<T, U> {
	pub fn new(
		account_id: AccountIdOf<T>,
		proposal: ProposalParams<T>,
		collective: CollectiveParams<T, U>,
		democracy: DemocracyParams<T>,
	) -> VotingProposal<T, U> {
		Self {
			account_id,
			proposal_call: proposal.call,
			proposal_hash: proposal.hash,
			collective_passed_call: collective.call_pass,
			collective_failed_call: collective.call_fail,
			collective_index: collective.index,
			collective_call: collective.call,
			collective_hash: collective.hash,
			democracy_failed_call: democracy.call_fail,
			democracy_hash: democracy.hash,
			democracy_referendum_index: 0,
			proposal_executed: false,
			collective_step: false,
			collective_closed: false,
		}
	}
}