1use std::path::Path;
2
3use crate::output::args::{OutputArgs, OutputFormat};
4use crate::output::errors::OutputError;
5
6pub fn write_output(
7 args: &OutputArgs,
8 block_name: &str,
9 contents: &str,
10) -> Result<(), OutputError> {
11 let mut name_parts: Vec<String> = Vec::new();
12 if !args.prefix.is_empty() {
13 name_parts.push(args.prefix.clone());
14 }
15 name_parts.push(block_name.to_string());
16 if !args.suffix.is_empty() {
17 name_parts.push(args.suffix.clone());
18 }
19 let ext = match args.format {
20 OutputFormat::Hex => "hex",
21 OutputFormat::Mot => "mot",
22 };
23 let out_filename = format!("{}.{}", name_parts.join("_"), ext);
24 let out_path = Path::new(&args.out).join(out_filename);
25 std::fs::write(out_path, contents).map_err(|e| {
26 OutputError::FileError(format!("failed to write block {}: {}", block_name, e))
27 })?;
28 Ok(())
29}