rain_metadata/cli/
output.rs1use 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}