Browse Source

Introduce the wrap_working_group_call macro to optimize the runtime code.

Shamil Gadelshin 4 years ago
parent
commit
374c1ea4de
1 changed files with 46 additions and 42 deletions
  1. 46 42
      runtime/src/integration/proposals/proposal_encoder.rs

+ 46 - 42
runtime/src/integration/proposals/proposal_encoder.rs

@@ -9,6 +9,20 @@ use rstd::marker::PhantomData;
 use rstd::vec::Vec;
 use srml_support::print;
 
+// The macro binds working group outer-level Call with the provided inner-level working group
+// extrinsic call. Outer-call is defined by the provided WorkingGroup param expression.
+
+//Params:
+// - $working_group: expression returning the 'common::working_group::WorkingGroup' enum
+// - $working_group_instance_call: expression returning the exact working group instance extrinsic call
+macro_rules! wrap_working_group_call {
+    ($working_group:expr, $working_group_instance_call:expr) => {{
+        match $working_group {
+            WorkingGroup::Storage => Call::StorageWorkingGroup($working_group_instance_call),
+        }
+    }};
+}
+
 /// _ProposalEncoder_ implementation. It encodes extrinsics with proposal details parameters
 /// using Runtime Call and parity codec.
 pub struct ExtrinsicProposalEncoder;
@@ -51,69 +65,59 @@ impl ProposalEncoder<Runtime> for ExtrinsicProposalEncoder {
                 return Vec::new();
             }
             ProposalDetails::AddWorkingGroupLeaderOpening(add_opening_params) => {
-                match add_opening_params.working_group {
-                    WorkingGroup::Storage => {
-                        Call::StorageWorkingGroup(Wg::create_add_opening_call(add_opening_params))
-                    }
-                }
+                wrap_working_group_call!(
+                    add_opening_params.working_group,
+                    Wg::create_add_opening_call(add_opening_params)
+                )
             }
             ProposalDetails::BeginReviewWorkingGroupLeaderApplications(
                 opening_id,
                 working_group,
-            ) => match working_group {
-                WorkingGroup::Storage => {
-                    Call::StorageWorkingGroup(Wg::create_begin_review_applications_call(opening_id))
-                }
-            },
+            ) => wrap_working_group_call!(
+                working_group,
+                Wg::create_begin_review_applications_call(opening_id)
+            ),
             ProposalDetails::FillWorkingGroupLeaderOpening(fill_opening_params) => {
-                match fill_opening_params.working_group {
-                    WorkingGroup::Storage => {
-                        Call::StorageWorkingGroup(Wg::create_fill_opening_call(fill_opening_params))
-                    }
-                }
+                wrap_working_group_call!(
+                    fill_opening_params.working_group,
+                    Wg::create_fill_opening_call(fill_opening_params)
+                )
             }
             ProposalDetails::SetWorkingGroupMintCapacity(mint_balance, working_group) => {
-                match working_group {
-                    WorkingGroup::Storage => {
-                        Call::StorageWorkingGroup(Wg::create_set_mint_capacity_call(mint_balance))
-                    }
-                }
+                wrap_working_group_call!(
+                    working_group,
+                    Wg::create_set_mint_capacity_call(mint_balance)
+                )
             }
             ProposalDetails::DecreaseWorkingGroupLeaderStake(
                 worker_id,
                 decreasing_stake,
                 working_group,
-            ) => match working_group {
-                WorkingGroup::Storage => Call::StorageWorkingGroup(Wg::create_decrease_stake_call(
-                    worker_id,
-                    decreasing_stake,
-                )),
-            },
+            ) => wrap_working_group_call!(
+                working_group,
+                Wg::create_decrease_stake_call(worker_id, decreasing_stake)
+            ),
             ProposalDetails::SlashWorkingGroupLeaderStake(
                 worker_id,
                 slashing_stake,
                 working_group,
-            ) => match working_group {
-                WorkingGroup::Storage => Call::StorageWorkingGroup(Wg::create_slash_stake_call(
-                    worker_id,
-                    slashing_stake,
-                )),
-            },
+            ) => wrap_working_group_call!(
+                working_group,
+                Wg::create_slash_stake_call(worker_id, slashing_stake,)
+            ),
             ProposalDetails::SetWorkingGroupLeaderReward(
                 worker_id,
                 reward_amount,
                 working_group,
-            ) => match working_group {
-                WorkingGroup::Storage => {
-                    Call::StorageWorkingGroup(Wg::create_set_reward_call(worker_id, reward_amount))
-                }
-            },
+            ) => wrap_working_group_call!(
+                working_group,
+                Wg::create_set_reward_call(worker_id, reward_amount)
+            ),
             ProposalDetails::TerminateWorkingGroupLeaderRole(terminate_role_params) => {
-                match terminate_role_params.working_group {
-                    WorkingGroup::Storage => {
-                        Call::StorageWorkingGroup(Wg::terminate_role_call(terminate_role_params))
-                    }
-                }
+                wrap_working_group_call!(
+                    terminate_role_params.working_group,
+                    Wg::terminate_role_call(terminate_role_params)
+                )
             }
         };