genesis.rs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #![cfg(feature = "std")]
  2. use crate::{GenesisConfig, Trait};
  3. use common::currency::BalanceOf;
  4. use serde::{Deserialize, Serialize};
  5. #[derive(Clone, Serialize, Deserialize)]
  6. pub struct Member<MemberId, AccountId, Moment> {
  7. pub member_id: MemberId,
  8. pub root_account: AccountId,
  9. pub controller_account: AccountId,
  10. pub handle: String,
  11. pub avatar_uri: String,
  12. pub about: String,
  13. pub registered_at_time: Moment,
  14. }
  15. /// Builder fo membership module genesis configuration.
  16. pub struct GenesisConfigBuilder<T: Trait> {
  17. default_paid_membership_fee: BalanceOf<T>,
  18. members: Vec<(T::MemberId, T::AccountId)>,
  19. }
  20. impl<T: Trait> Default for GenesisConfigBuilder<T> {
  21. fn default() -> Self {
  22. Self {
  23. default_paid_membership_fee: BalanceOf::<T>::default(), // Was 100, will this break any tests??
  24. members: vec![],
  25. }
  26. }
  27. }
  28. impl<T: Trait> GenesisConfigBuilder<T> {
  29. /// Assign default paid membeship fee
  30. pub fn default_paid_membership_fee(
  31. mut self,
  32. default_paid_membership_fee: BalanceOf<T>,
  33. ) -> Self {
  34. self.default_paid_membership_fee = default_paid_membership_fee;
  35. self
  36. }
  37. /// Assign a collection of MemberId and AccountId pairs, used to derive mock member at genesis
  38. pub fn members(mut self, members: Vec<(T::MemberId, T::AccountId)>) -> Self {
  39. self.members = members;
  40. self
  41. }
  42. /// Generates a Vec of `Member`s from pairs of MemberId and AccountId
  43. fn generate_mock_members(&self) -> Vec<Member<T::MemberId, T::AccountId, T::Moment>> {
  44. self.members
  45. .iter()
  46. .enumerate()
  47. .map(|(ix, (ref member_id, ref account_id))| Member {
  48. member_id: *member_id,
  49. root_account: account_id.clone(),
  50. controller_account: account_id.clone(),
  51. // hack to get min handle length to 5
  52. handle: (10000 + ix).to_string(),
  53. avatar_uri: "".into(),
  54. about: "".into(),
  55. registered_at_time: T::Moment::from(0u32),
  56. })
  57. .collect()
  58. }
  59. /// Construct GenesisConfig for mocked testing purposes only
  60. pub fn build(&self) -> GenesisConfig<T> {
  61. GenesisConfig::<T> {
  62. default_paid_membership_fee: self.default_paid_membership_fee,
  63. members: self.generate_mock_members(),
  64. }
  65. }
  66. }