Implement Display for ImgHeader

This commit is contained in:
Romain Garbage 2022-09-04 20:08:07 +02:00
parent 9d93690f2c
commit 36dde9f332
No known key found for this signature in database
GPG key ID: 9DFBAECAE17DF2EE
2 changed files with 24 additions and 18 deletions

View file

@ -20,7 +20,7 @@
use crate::local_error::Error;
use crate::utils::remove_null_bytes;
mod display;
pub mod display;
#[derive(Default, Clone)]
pub struct ImgHeader {

View file

@ -6,7 +6,7 @@ use tabled::{Table, Tabled};
use crate::tabled_types::{ArrayValue, HexValue};
#[derive(Tabled)]
struct TableEntry {
pub struct TableEntry {
#[tabled(rename = "Header size (bytes)")]
header_len: u32,
#[tabled(rename = "Unknown field")]
@ -37,24 +37,30 @@ struct TableEntry {
file_checksum_size: u32,
}
impl From<&ImgHeader> for TableEntry {
fn from(header: &ImgHeader) -> Self {
TableEntry {
header_len: u32::from_le_bytes(header.header_len),
unknown_field: ArrayValue::from(header.unknown_field.as_slice()),
hardware_id: ArrayValue::from(header.hardware_id.as_slice()),
file_sequence: ArrayValue::from(header.file_sequence.as_slice()),
file_size: u32::from_le_bytes(header.file_size),
file_date: ArrayValue::from(header.file_date.as_slice()),
file_time: ArrayValue::from(header.file_time.as_slice()),
file_type: header.filename_lossy(),
blank_field1: ArrayValue::from(header.blank_field1.as_slice()),
header_checksum: HexValue::from(header.header_checksum.as_slice()),
blocksize_raw: ArrayValue::from(header.blocksize.as_slice()),
blocksize: header.blocksize(),
blank_field2: ArrayValue::from(header.blank_field2.as_slice()),
file_checksum_size: header.file_checksum_size,
}
}
}
impl std::fmt::Display for ImgHeader {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
let entries = TableEntry {
header_len: u32::from_le_bytes(self.header_len),
unknown_field: ArrayValue::from(self.unknown_field.as_slice()),
hardware_id: ArrayValue::from(self.hardware_id.as_slice()),
file_sequence: ArrayValue::from(self.file_sequence.as_slice()),
file_size: u32::from_le_bytes(self.file_size),
file_date: ArrayValue::from(self.file_date.as_slice()),
file_time: ArrayValue::from(self.file_time.as_slice()),
file_type: self.filename_lossy(),
blank_field1: ArrayValue::from(self.blank_field1.as_slice()),
header_checksum: HexValue::from(self.header_checksum.as_slice()),
blocksize_raw: ArrayValue::from(self.blocksize.as_slice()),
blocksize: self.blocksize(),
blank_field2: ArrayValue::from(self.blank_field2.as_slice()),
file_checksum_size: self.file_checksum_size,
};
let entries = TableEntry::from(self);
let table = Table::new(vec![entries]);
write!(f, "{}", table)