use std::fmt;
use crate::builder::*;
#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)]
pub struct RhexdumpConfig {
pub(crate) base: Base,
pub(crate) endianness: Endianness,
pub(crate) bit_width: BitWidth,
pub(crate) group_size: GroupSize,
pub(crate) groups_per_line: usize,
pub(crate) bytes_per_line: usize,
pub(crate) hide_duplicate_lines: bool,
}
unsafe impl Send for RhexdumpConfig {}
unsafe impl Sync for RhexdumpConfig {}
impl Default for RhexdumpConfig {
fn default() -> Self {
Self {
base: Base::default(),
endianness: Endianness::default(),
bit_width: BitWidth::default(),
group_size: GroupSize::default(),
groups_per_line: 16,
bytes_per_line: 16,
hide_duplicate_lines: false,
}
}
}
impl fmt::Display for RhexdumpConfig {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"RhexdumpConfig {{ \
base: {}, \
endianness: {}, \
bit_width: {}, \
group_size: {}, \
groups_per_line: {}, \
hide_duplicate_lines: {} \
}}",
self.base,
self.endianness,
self.bit_width,
self.group_size,
self.groups_per_line,
self.hide_duplicate_lines,
)
}
}
pub trait RhexdumpGetConfig {
fn get_config(&self) -> RhexdumpConfig;
#[inline]
fn get_size_line(&self) -> usize {
let config = self.get_config();
let ascii_hex_len = config.bit_width as usize
+ 1
+ (config.group_size.get_size(config.base) + 1) * config.groups_per_line;
ascii_hex_len + 2 + config.bytes_per_line + 1
}
}