extern crate alloc;
use alloc::{format, vec::Vec};
use subsoil::genesis_builder::{PresetId, Result as BuildResult};
use topsoil_core::traits::BuildGenesisConfig;
pub fn build_state<GC: BuildGenesisConfig>(json: Vec<u8>) -> BuildResult {
let gc =
serde_json::from_slice::<GC>(&json).map_err(|e| format!("Invalid JSON blob: {}", e))?;
<GC as BuildGenesisConfig>::build(&gc);
Ok(())
}
pub fn get_preset<GC>(
name: &Option<PresetId>,
preset_for_name: impl FnOnce(&PresetId) -> Option<Vec<u8>>,
) -> Option<Vec<u8>>
where
GC: BuildGenesisConfig + Default,
{
name.as_ref().map_or(
Some(
serde_json::to_string(&GC::default())
.expect("serialization to json is expected to work. qed.")
.into_bytes(),
),
preset_for_name,
)
}