// Copyright 2020 Parity Technologies (UK) Ltd. // This file is part of Substrate. // Substrate is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // Substrate is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with Substrate. If not, see <http://www.gnu.org/licenses/>. mod import_params; mod transaction_pool_params; mod shared_params; mod node_key_params; mod network_configuration_params; mod pruning_params; use std::str::FromStr; use std::fmt::Debug; pub use crate::params::import_params::*; pub use crate::params::transaction_pool_params::*; pub use crate::params::shared_params::*; pub use crate::params::node_key_params::*; pub use crate::params::network_configuration_params::*; pub use crate::params::pruning_params::*; /// Wrapper type of `String` that holds an unsigned integer of arbitrary size, formatted as a decimal. #[derive(Debug, Clone)] pub struct BlockNumber(String); impl FromStr for BlockNumber { type Err = String; fn from_str(block_number: &str) -> Result<Self, Self::Err> { if block_number.chars().any(|d| !d.is_digit(10)) { Err(format!( "Invalid block number: {}, expected decimal formatted unsigned integer", block_number, )) } else { Ok(Self(block_number.to_owned())) } } } impl BlockNumber { /// Wrapper on top of `std::str::parse<N>` but with `Error` as a `String` /// /// See `https://doc.rust-lang.org/std/primitive.str.html#method.parse` for more elaborate /// documentation. pub fn parse<N>(&self) -> Result<N, String> where N: FromStr, N::Err: std::fmt::Debug, { self.0 .parse() .map_err(|e| format!("BlockNumber: {} parsing failed because of {:?}", self.0, e)) } }