use crate::constants::DEFAULT_WALLET_FILENAME;
use crate::flows::presenter::Presentable;
use solana_tools_lite::adapters::io_adapter as io;
use solana_tools_lite::handlers::generate;
use solana_tools_lite::models::results::GenResult;
use std::path::{Path, PathBuf};
use crate::shell::error::CliError;
use serde_json;
pub fn execute(
mnemonic_path: Option<&str>,
passphrase_path: Option<&str>,
json: bool,
show_secret: bool,
out_path: Option<&str>,
force: bool,
) -> Result<(), CliError> {
let result = generate::handle(mnemonic_path, passphrase_path)?;
let saved_path = save_to_file(&result, out_path, force)?;
let print_stderr = out_path.is_some();
print_result(&result, json, show_secret, print_stderr, &saved_path)?;
Ok(())
}
fn save_to_file(
result: &GenResult,
out_path: Option<&str>,
force: bool,
) -> Result<PathBuf, CliError> {
let target = io::resolve_final_path_with_default(out_path, DEFAULT_WALLET_FILENAME);
let payload = serde_json::to_string_pretty(result)
.map_err(|e| CliError::PresentationEncode(e.to_string()))?;
io::write_secret_file(&target, &payload, force)?;
Ok(target)
}
fn print_result(
result: &GenResult,
json: bool,
show_secret: bool,
print_stderr: bool,
saved_path: &Path,
) -> Result<(), CliError> {
result.present(json, show_secret, print_stderr)?;
eprintln!("Saved: {}", saved_path.display());
Ok(())
}