diff --git a/crates/configuration/src/parachain.rs b/crates/configuration/src/parachain.rs index f7f0e3d3e37c29e5442f538d48dd80cb5e3fcf8f..702d0ed10787b5d57dedce7b58fefd4393400f30 100644 --- a/crates/configuration/src/parachain.rs +++ b/crates/configuration/src/parachain.rs @@ -1,7 +1,7 @@ use std::{cell::RefCell, error::Error, fmt::Display, marker::PhantomData, rc::Rc}; use multiaddr::Multiaddr; -use serde::Serialize; +use serde::{ser::SerializeStruct, Serialize}; use crate::shared::{ errors::{ConfigError, FieldError}, @@ -14,17 +14,34 @@ use crate::shared::{ }, }; -#[derive(Debug, Clone, PartialEq, Serialize)] +#[derive(Debug, Clone, PartialEq)] pub enum RegistrationStrategy { InGenesis, UsingExtrinsic, } +impl Serialize for RegistrationStrategy { + fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> + where + S: serde::Serializer, + { + let mut state = serializer.serialize_struct("RegistrationStrategy", 1)?; + + match self { + Self::InGenesis => state.serialize_field("add_to_genesis", &true)?, + Self::UsingExtrinsic => state.serialize_field("register_para", &true)?, + } + + state.end() + } +} + /// A parachain configuration, composed of collators and fine-grained configuration options. #[derive(Debug, Clone, PartialEq, Serialize)] pub struct ParachainConfig { id: u32, chain: Option<Chain>, + #[serde(flatten)] registration_strategy: Option<RegistrationStrategy>, #[serde(rename = "balance")] initial_balance: U128,