Sfoglia il codice sorgente

make ActorId configurable on membership Trait

Mokhtar Naamani 5 anni fa
parent
commit
be118a6d6d

+ 1 - 0
src/governance/mock.rs

@@ -69,6 +69,7 @@ impl membership::members::Trait for Test {
     type MemberId = u32;
     type SubscriptionId = u32;
     type PaidTermId = u32;
+    type ActorId = u32;
     type InitialMembersBalance = InitialMembersBalance;
 }
 

+ 1 - 0
src/governance/proposals.rs

@@ -652,6 +652,7 @@ mod tests {
         type MemberId = u32;
         type PaidTermId = u32;
         type SubscriptionId = u32;
+        type ActorId = u32;
         type InitialMembersBalance = InitialMembersBalance;
     }
 

+ 1 - 0
src/lib.rs

@@ -473,6 +473,7 @@ impl members::Trait for Runtime {
     type MemberId = u64;
     type PaidTermId = u64;
     type SubscriptionId = u64;
+    type ActorId = u64;
     type InitialMembersBalance = InitialMembersBalance;
 }
 

+ 21 - 10
src/membership/members.rs

@@ -44,6 +44,16 @@ pub trait Trait: system::Trait + GovernanceCurrency + timestamp::Trait {
         + MaybeSerializeDebug
         + PartialEq;
 
+    type ActorId: Parameter
+        + Member
+        + SimpleArithmetic
+        + Codec
+        + Default
+        + Copy
+        + MaybeSerializeDebug
+        + PartialEq
+        + Ord;
+
     /// Initial balance of members created at genesis
     type InitialMembersBalance: Get<BalanceOf<Self>>;
 }
@@ -101,7 +111,7 @@ pub struct Profile<T: Trait> {
     pub controller_account: T::AccountId,
 
     /// The set of registered roles the member has enrolled in.
-    pub roles: ActorInRoleSet,
+    pub roles: ActorInRoleSet<T::ActorId>,
 }
 
 #[derive(Clone, Debug, Encode, Decode, PartialEq)]
@@ -193,7 +203,7 @@ decl_storage! {
         pub MaxAvatarUriLength get(max_avatar_uri_length) : u32 = DEFAULT_MAX_AVATAR_URI_LENGTH;
         pub MaxAboutTextLength get(max_about_text_length) : u32 = DEFAULT_MAX_ABOUT_TEXT_LENGTH;
 
-        pub MembershipIdByActorInRole get(membership_id_by_actor_in_role): map ActorInRole => T::MemberId;
+        pub MembershipIdByActorInRole get(membership_id_by_actor_in_role): map ActorInRole<T::ActorId> => T::MemberId;
     }
     add_extra_genesis {
         config(default_paid_membership_fee): BalanceOf<T>;
@@ -221,15 +231,16 @@ decl_storage! {
 decl_event! {
     pub enum Event<T> where
       <T as system::Trait>::AccountId,
-      <T as Trait>::MemberId, {
+      <T as Trait>::MemberId,
+      <T as Trait>::ActorId, {
         MemberRegistered(MemberId, AccountId),
         MemberUpdatedAboutText(MemberId),
         MemberUpdatedAvatar(MemberId),
         MemberUpdatedHandle(MemberId),
         MemberSetRootAccount(MemberId, AccountId),
         MemberSetControllerAccount(MemberId, AccountId),
-        MemberRegisteredRole(MemberId, ActorInRole),
-        MemberUnregisteredRole(MemberId, ActorInRole),
+        MemberRegisteredRole(MemberId, ActorInRole<ActorId>),
+        MemberUnregisteredRole(MemberId, ActorInRole<ActorId>),
     }
 }
 
@@ -534,7 +545,7 @@ impl<T: Trait> Module<T> {
     /// actor_in_role.
     pub fn key_can_sign_for_role(
         signing_account: &T::AccountId,
-        actor_in_role: ActorInRole,
+        actor_in_role: ActorInRole<T::ActorId>,
     ) -> bool {
         Self::member_ids_by_controller_account_id(signing_account)
             .iter()
@@ -560,7 +571,7 @@ impl<T: Trait> Module<T> {
     pub fn can_register_role_on_member(
         signing_account: &T::AccountId,
         member_id: T::MemberId,
-        actor_in_role: ActorInRole,
+        actor_in_role: ActorInRole<T::ActorId>,
     ) -> Result<(), &'static str> {
         let profile = Self::ensure_profile(member_id)?;
 
@@ -594,7 +605,7 @@ impl<T: Trait> Module<T> {
     pub fn register_role_on_member(
         signing_account: &T::AccountId,
         member_id: T::MemberId,
-        actor_in_role: ActorInRole,
+        actor_in_role: ActorInRole<T::ActorId>,
     ) -> Result<(), &'static str> {
         // policy check
         Self::can_register_role_on_member(signing_account, member_id, actor_in_role)?;
@@ -611,7 +622,7 @@ impl<T: Trait> Module<T> {
     pub fn can_unregister_role_on_member(
         signing_account: &T::AccountId,
         member_id: T::MemberId,
-        actor_in_role: ActorInRole,
+        actor_in_role: ActorInRole<T::ActorId>,
     ) -> Result<(), &'static str> {
         let profile = Self::ensure_profile(member_id)?;
 
@@ -634,7 +645,7 @@ impl<T: Trait> Module<T> {
     pub fn unregister_role_on_member(
         signing_account: &T::AccountId,
         member_id: T::MemberId,
-        actor_in_role: ActorInRole,
+        actor_in_role: ActorInRole<T::ActorId>,
     ) -> Result<(), &'static str> {
         Self::can_unregister_role_on_member(signing_account, member_id, actor_in_role)?;
 

+ 1 - 0
src/membership/mock.rs

@@ -94,6 +94,7 @@ impl members::Trait for Test {
     type MemberId = u32;
     type PaidTermId = u32;
     type SubscriptionId = u32;
+    type ActorId = u32;
     type InitialMembersBalance = InitialMembersBalance;
 }
 

+ 9 - 11
src/membership/role_types.rs

@@ -2,8 +2,6 @@ use codec::{Decode, Encode};
 use rstd::collections::btree_set::BTreeSet;
 use rstd::prelude::*;
 
-pub type ActorId = u32;
-
 #[derive(Encode, Decode, Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Debug)]
 pub enum Role {
     StorageProvider,
@@ -13,23 +11,23 @@ pub enum Role {
 }
 
 #[derive(Encode, Decode, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Debug)]
-pub struct ActorInRole {
+pub struct ActorInRole<ActorId> {
     pub role: Role,
     pub actor_id: ActorId,
 }
 
-impl ActorInRole {
+impl<ActorId> ActorInRole<ActorId> {
     pub fn new(role: Role, actor_id: ActorId) -> Self {
         ActorInRole { role, actor_id }
     }
 }
 
-#[derive(Encode, Decode)]
-pub struct ActorInRoleSet(BTreeSet<ActorInRole>);
+#[derive(Encode, Decode, Eq, PartialEq, Ord, PartialOrd)]
+pub struct ActorInRoleSet<ActorId: Ord + Copy>(BTreeSet<ActorInRole<ActorId>>);
 
-impl ActorInRoleSet {
+impl<ActorId: Ord + Copy> ActorInRoleSet<ActorId> {
     pub fn new() -> Self {
-        ActorInRoleSet(BTreeSet::new())
+        Self(BTreeSet::<ActorInRole<ActorId>>::new())
     }
 
     fn role_instance_count(&self, role: Role) -> usize {
@@ -46,15 +44,15 @@ impl ActorInRoleSet {
         self.role_instance_count(role) > 0
     }
 
-    pub fn register_role(&mut self, actor_in_role: &ActorInRole) -> bool {
+    pub fn register_role(&mut self, actor_in_role: &ActorInRole<ActorId>) -> bool {
         self.0.insert(*actor_in_role)
     }
 
-    pub fn unregister_role(&mut self, actor_in_role: &ActorInRole) -> bool {
+    pub fn unregister_role(&mut self, actor_in_role: &ActorInRole<ActorId>) -> bool {
         self.0.remove(actor_in_role)
     }
 
-    pub fn has_registered_role(&self, actor_in_role: &ActorInRole) -> bool {
+    pub fn has_registered_role(&self, actor_in_role: &ActorInRole<ActorId>) -> bool {
         self.0.contains(actor_in_role)
     }
 }

+ 1 - 0
src/roles/mock.rs

@@ -102,6 +102,7 @@ impl membership::members::Trait for Test {
     type MemberId = u32;
     type SubscriptionId = u32;
     type PaidTermId = u32;
+    type ActorId = u32;
     type InitialMembersBalance = InitialMembersBalance;
 }
 

+ 1 - 0
src/storage/mock.rs

@@ -194,6 +194,7 @@ impl members::Trait for Test {
     type MemberId = u32;
     type SubscriptionId = u32;
     type PaidTermId = u32;
+    type ActorId = u32;
     type InitialMembersBalance = InitialMembersBalance;
 }