solana_tools_lite_cli/flows/
generation.rs1use crate::constants::DEFAULT_WALLET_FILENAME;
2use crate::flows::presenter::Presentable;
3use solana_tools_lite::adapters::io_adapter as io;
4use solana_tools_lite::handlers::generate;
5use solana_tools_lite::models::results::GenResult;
6use std::path::{Path, PathBuf};
7use crate::shell::error::CliError;
8use serde_json;
9
10pub fn execute(
20 mnemonic_path: Option<&str>,
21 passphrase_path: Option<&str>,
22 json: bool,
23 show_secret: bool,
24 out_path: Option<&str>,
25 force: bool,
26) -> Result<(), CliError> {
27 let result = generate::handle(mnemonic_path, passphrase_path)?;
28 let saved_path = save_to_file(&result, out_path, force)?;
29
30 let print_stderr = out_path.is_some();
31 print_result(&result, json, show_secret, print_stderr, &saved_path)?;
32
33 Ok(())
34}
35
36fn save_to_file(
37 result: &GenResult,
38 out_path: Option<&str>,
39 force: bool,
40) -> Result<PathBuf, CliError> {
41 let target = io::resolve_final_path_with_default(out_path, DEFAULT_WALLET_FILENAME);
43
44 let payload = serde_json::to_string_pretty(result)
46 .map_err(|e| CliError::PresentationEncode(e.to_string()))?;
47 io::write_secret_file(&target, &payload, force)?;
48
49 Ok(target)
50}
51
52fn print_result(
54 result: &GenResult,
55 json: bool,
56 show_secret: bool,
57 print_stderr: bool,
58 saved_path: &Path,
59) -> Result<(), CliError> {
60 result.present(json, show_secret, print_stderr)?;
62
63 eprintln!("Saved: {}", saved_path.display());
65 Ok(())
66}