use bip32::{Prefix, Seed, XPrv};
use bip39::{Language, Mnemonic};
use clap::Parser;
#[derive(Parser, Debug)]
#[command(author, version, about, long_about = None)]
struct Args {
#[arg(short, long)]
mnemonic: Option<String>,
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
let args = Args::parse();
let m = if let Some(all_words) = args.mnemonic {
Mnemonic::parse(all_words)
} else {
let mut rng = bip39::rand_core::OsRng;
bip39::Mnemonic::generate_in_with(&mut rng, Language::English, 12)
};
let mnemonic = if let Ok(r) = m {
r
} else {
println!("Please check that your mnemonic phrase uses 12 words from BIP39 english word list ( https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt ) separated by single spaces and try again.");
return Ok(());
};
let private_key = XPrv::new(&Seed::new(mnemonic.to_seed("")))?;
println!(
"{}\n{}",
mnemonic.to_string(),
private_key.to_string(Prefix::XPRV).to_string()
);
Ok(())
}