mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
rust/utils: Add Hexslice
Add a thin wrapper around [u8] to be able to represent an u8-slice as a hex-string for Display and Serialize. Acked-by: Qi Feng Huo <huoqif@cn.ibm.com> Reviewed-by: Marc Hartmayer <mhartmay@linux.ibm.com> Signed-off-by: Steffen Eiden <seiden@linux.ibm.com>
This commit is contained in:
@@ -9,3 +9,4 @@ clap = { version ="4.1", features = ["derive", "wrap_help"] }
|
||||
libc = "0.2.49"
|
||||
log = { version = "0.4.6", features = ["std", "release_max_level_debug"] }
|
||||
pv = { path = "../pv" }
|
||||
serde = { version = "1.0.139"}
|
||||
|
||||
55
rust/utils/src/hexslice.rs
Normal file
55
rust/utils/src/hexslice.rs
Normal file
@@ -0,0 +1,55 @@
|
||||
// SPDX-License-Identifier: MIT
|
||||
//
|
||||
// Copyright IBM Corp. 2024
|
||||
use serde::Serialize;
|
||||
|
||||
/// Displays/Serializes an u8-slice into a Hex-string
|
||||
///
|
||||
/// Thin wrapper around an u8-slice.
|
||||
#[derive(Debug)]
|
||||
pub struct HexSlice<'a>(&'a [u8]);
|
||||
|
||||
impl<'a> HexSlice<'a> {
|
||||
/// Creates a [`HexSlice`] from the given value.
|
||||
pub fn from<T>(s: &'a T) -> Self
|
||||
where
|
||||
T: ?Sized + AsRef<[u8]> + 'a,
|
||||
{
|
||||
s.into()
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, T> From<&'a T> for HexSlice<'a>
|
||||
where
|
||||
T: ?Sized + AsRef<[u8]> + 'a,
|
||||
{
|
||||
fn from(value: &'a T) -> Self {
|
||||
Self(value.as_ref())
|
||||
}
|
||||
}
|
||||
impl<'a> Serialize for HexSlice<'a> {
|
||||
fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
|
||||
where
|
||||
S: serde::Serializer,
|
||||
{
|
||||
serializer.serialize_str(&format!("{self:#}"))
|
||||
}
|
||||
}
|
||||
|
||||
impl std::fmt::Display for HexSlice<'_> {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
if f.alternate() {
|
||||
write!(f, "0x")?;
|
||||
}
|
||||
for byte in self.0 {
|
||||
write!(f, "{:0>2x}", byte)?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl AsRef<[u8]> for HexSlice<'_> {
|
||||
fn as_ref(&self) -> &[u8] {
|
||||
self.0
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@
|
||||
//!
|
||||
//! Copyright IBM Corp. 2023, 2024
|
||||
mod cli;
|
||||
mod hexslice;
|
||||
mod log;
|
||||
mod tmpfile;
|
||||
|
||||
@@ -11,6 +12,7 @@ pub use crate::cli::CertificateOptions;
|
||||
pub use crate::cli::{get_reader_from_cli_file_arg, get_writer_from_cli_file_arg};
|
||||
pub use crate::cli::{print_cli_error, print_error};
|
||||
pub use crate::cli::{STDIN, STDOUT};
|
||||
pub use crate::hexslice::HexSlice;
|
||||
pub use crate::log::PvLogger;
|
||||
pub use crate::tmpfile::TemporaryDirectory;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user