binary_mirror/lib.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
use std::fmt;
#[derive(Debug)]
pub struct BytesSizeError {
pub(crate) expected: usize,
pub(crate) actual: usize,
pub(crate) bytes: String,
}
impl fmt::Display for BytesSizeError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"bytes size mismatch: expected {} bytes but got {} bytes, content: \"{}\"",
self.expected, self.actual, self.bytes
)
}
}
impl std::error::Error for BytesSizeError {}
impl BytesSizeError {
pub fn new(expected: usize, actual: usize, bytes: String) -> Self {
Self {
expected,
actual,
bytes,
}
}
}
pub fn to_hex_repr(bytes: &[u8]) -> String {
bytes.iter().map(|b| format!("0x{:02x}", b)).collect::<Vec<_>>().join(", ")
}
pub fn to_bytes_repr(bytes: &[u8]) -> String {
bytes.iter().map(|&b| {
match b {
0x0A => "\\n".to_string(),
0x0D => "\\r".to_string(),
0x09 => "\\t".to_string(),
0x20..=0x7E => (b as char).to_string(),
_ => format!("\\x{:02x}", b),
}
}).collect::<Vec<String>>().join("")
}
// pub mod strp {
// pub fn serialize<S>(value: &[u8], serializer: S) -> Result<S::Ok, S::Error>
// where
// S: serde::Serializer,
// {
// let s = String::from_utf8_lossy(value).trim().to_string();
// serializer.serialize_str(&s)
// }
// pub fn deserialize<'de, D>(deserializer: D) -> Result<[u8; 10], D::Error>
// where
// D: serde::Deserializer<'de>,
// {
// let s: &[u8] = serde::Deserialize::deserialize(deserializer)?;
// Ok(s.try_into().unwrap())
// }
// }