rain_metadata/cli/
output.rs

1use std::io::Write;
2use strum::EnumIter;
3use strum::EnumString;
4use std::path::PathBuf;
5
6#[derive(serde::Serialize, Clone, Copy, EnumString, EnumIter, strum::Display)]
7#[strum(serialize_all = "kebab_case")]
8#[serde(rename_all = "kebab-case")]
9#[repr(u64)]
10pub enum SupportedOutputEncoding {
11    Binary,
12    Hex,
13}
14
15pub fn output(
16    output_path: &Option<PathBuf>,
17    output_encoding: SupportedOutputEncoding,
18    bytes: &[u8],
19) -> anyhow::Result<()> {
20    let hex_encoded: String;
21    let encoded_bytes: &[u8] = match output_encoding {
22        SupportedOutputEncoding::Binary => bytes,
23        SupportedOutputEncoding::Hex => {
24            hex_encoded = alloy_primitives::hex::encode_prefixed(bytes);
25            hex_encoded.as_bytes()
26        }
27    };
28    if let Some(output_path) = output_path {
29        std::fs::write(output_path, encoded_bytes)?
30    } else {
31        std::io::stdout().write_all(encoded_bytes)?
32    }
33    Ok(())
34}