1use std::{
2 fs::{self, File},
3 path::PathBuf,
4};
5
6use reqwest::Url;
7
8use structopt::StructOpt;
9
10#[derive(StructOpt)]
11struct Args {
12 #[structopt(short, long)]
13 input: Option<PathBuf>,
14 #[structopt(long)]
15 url: Option<Url>,
16 #[structopt(short, long)]
17 output: PathBuf,
18}
19
20fn main() -> anyhow::Result<()> {
21 let Args { input, url, output } = Args::from_args();
22
23 let data = if let Some(input) = input {
24 fs::read(input)?
25 } else if let Some(url) = url {
26 reqwest::blocking::get(url)?.bytes()?.to_vec()
27 } else {
28 anyhow::bail!("must provide either `--input` or `--url`");
29 };
30
31 let daemon_json = serde_json::from_slice::<node::daemon_json::DaemonJson>(&data)?;
32
33 let prebuilt_config =
34 node::transition_frontier::genesis::PrebuiltGenesisConfig::try_from(daemon_json)?;
35
36 prebuilt_config.store(File::create(output)?)?;
37
38 Ok(())
39}