chain_spec_guide_runtime/
pallets.rs1use alloc::vec::Vec;
21use frame::prelude::*;
22
23#[docify::export]
24#[frame::pallet(dev_mode)]
25pub mod pallet_bar {
26 use super::*;
27
28 #[pallet::config]
29 pub trait Config: frame_system::Config {}
30
31 #[pallet::pallet]
32 pub struct Pallet<T>(_);
33
34 #[pallet::storage]
35 pub(super) type InitialAccount<T: Config> = StorageValue<Value = T::AccountId>;
36
37 #[pallet::genesis_config]
39 #[derive(DefaultNoBound)]
40 #[docify::export(pallet_bar_GenesisConfig)]
41 pub struct GenesisConfig<T: Config> {
42 pub initial_account: Option<T::AccountId>,
43 }
44
45 #[pallet::genesis_build]
46 #[docify::export(pallet_bar_build)]
47 impl<T: Config> BuildGenesisConfig for GenesisConfig<T> {
48 fn build(&self) {
51 InitialAccount::<T>::set(self.initial_account.clone());
52 }
53 }
54}
55
56#[derive(Default, serde::Serialize, serde::Deserialize)]
60#[serde(rename_all = "camelCase")]
61pub struct FooStruct {
62 pub field_a: u8,
63 pub field_b: u8,
64}
65
66#[derive(Default, serde::Serialize, serde::Deserialize)]
70#[serde(deny_unknown_fields, rename_all = "camelCase")]
71pub struct SomeFooData1 {
72 pub a: u8,
73 pub b: u8,
74}
75
76#[derive(Default, serde::Serialize, serde::Deserialize)]
80#[docify::export]
81#[serde(deny_unknown_fields, rename_all = "camelCase")]
82pub struct SomeFooData2 {
83 #[serde(default, with = "sp_core::bytes")]
84 pub values: Vec<u8>,
85}
86
87#[derive(Default, serde::Serialize, serde::Deserialize)]
89pub enum FooEnum {
90 #[default]
91 Data0,
92 Data1(SomeFooData1),
93 Data2(SomeFooData2),
94}
95
96#[docify::export]
97#[frame::pallet(dev_mode)]
98pub mod pallet_foo {
99 use super::*;
100
101 #[pallet::config]
102 pub trait Config: frame_system::Config {}
103
104 #[pallet::pallet]
105 pub struct Pallet<T>(_);
106
107 #[pallet::storage]
108 pub type ProcessedEnumValue<T> = StorageValue<Value = u64>;
109 #[pallet::storage]
110 pub type SomeInteger<T> = StorageValue<Value = u32>;
111
112 #[docify::export(pallet_foo_GenesisConfig)]
114 #[pallet::genesis_config]
115 #[derive(DefaultNoBound)]
116 pub struct GenesisConfig<T: Config> {
117 pub some_integer: u32,
118 pub some_enum: FooEnum,
119 pub some_struct: FooStruct,
120 #[serde(skip)]
121 pub _phantom: PhantomData<T>,
122 }
123
124 #[pallet::genesis_build]
125 #[docify::export(pallet_foo_build)]
126 impl<T: Config> BuildGenesisConfig for GenesisConfig<T> {
127 fn build(&self) {
129 let processed_value: u64 = match &self.some_enum {
130 FooEnum::Data0 => 0,
131 FooEnum::Data1(v) => (v.a + v.b).into(),
132 FooEnum::Data2(v) => v.values.iter().map(|v| *v as u64).sum(),
133 };
134 ProcessedEnumValue::<T>::set(Some(processed_value));
135 SomeInteger::<T>::set(Some(self.some_integer));
136 }
137 }
138}