1
// Copyright (C) Moondance Labs Ltd.
2
// This file is part of Tanssi.
3

            
4
// Tanssi is free software: you can redistribute it and/or modify
5
// it under the terms of the GNU General Public License as published by
6
// the Free Software Foundation, either version 3 of the License, or
7
// (at your option) any later version.
8

            
9
// Tanssi is distributed in the hope that it will be useful,
10
// but WITHOUT ANY WARRANTY; without even the implied warranty of
11
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
// GNU General Public License for more details.
13

            
14
// You should have received a copy of the GNU General Public License
15
// along with Tanssi.  If not, see <http://www.gnu.org/licenses/>
16

            
17
use {
18
    sc_chain_spec::{ChainSpecExtension, ChainSpecGroup},
19
    serde::{Deserialize, Serialize},
20
};
21

            
22
/// Specialized `ChainSpec` for container chains that only allows raw genesis format.
23
pub type RawChainSpec = sc_service::GenericChainSpec<Extensions>;
24

            
25
/// The extensions for the [`ChainSpec`].
26
2742
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, ChainSpecGroup, ChainSpecExtension)]
27
#[serde(deny_unknown_fields)]
28
pub struct Extensions {
29
    /// The relay chain of the Parachain.
30
    pub relay_chain: String,
31
    /// The id of the Parachain.
32
    pub para_id: u32,
33
}
34

            
35
impl Extensions {
36
    /// Try to get the extension from the given `ChainSpec`.
37
1638
    pub fn try_get(chain_spec: &dyn sc_service::ChainSpec) -> Option<&Self> {
38
1638
        sc_chain_spec::get_extension(chain_spec.extensions())
39
1638
    }
40
}