use crate::flows::presenter::Presentable;
use solana_tools_lite::adapters::io_adapter as io;
use solana_tools_lite::handlers::sign_message;
use solana_tools_lite::models::results::SignResult;
use std::path::Path;
use crate::shell::error::CliError;
pub fn execute(
message: Option<&str>,
message_file: Option<&str>,
secret_key_path: &str,
output: Option<&str>,
force: bool,
json: bool,
) -> Result<(), CliError> {
let message_content = io::read_message(message, message_file)?;
let signing_key = io::read_and_parse_secret_key(secret_key_path)?;
let result = sign_message::handle(&message_content, &signing_key)?;
let saved_path = io::save_pretty_json(&result, output, force, "sign.json")?;
print_result(&result, json, saved_path.as_deref())?;
Ok(())
}
fn print_result(
result: &SignResult,
json: bool,
saved_path: Option<&Path>,
) -> Result<(), CliError> {
match saved_path {
Some(path) => {
eprintln!("{}", result.signature_base58);
eprintln!("Saved: {}", path.display());
}
None => {
result.present(json, false, false)?;
}
}
Ok(())
}