#[must_use] pubfn hex<A: AsRef<[u8]>>(buf: A) -> String { letmut ret = String::with_capacity(buf.as_ref().len() * 2); for b in buf.as_ref() {
write!(&mut ret, "{b:02x}").expect("write OK");
}
ret
}
#[must_use] pubfn hex_snip_middle<A: AsRef<[u8]>>(buf: A) -> String { const SHOW_LEN: usize = 8; let buf = buf.as_ref(); if buf.len() <= SHOW_LEN * 2 {
hex_with_len(buf)
} else { letmut ret = String::with_capacity(SHOW_LEN * 2 + 16);
write!(&mut ret, "[{}]: ", buf.len()).expect("write OK"); for b in &buf[..SHOW_LEN] {
write!(&mut ret, "{b:02x}").expect("write OK");
}
ret.push_str(".."); for b in &buf[buf.len() - SHOW_LEN..] {
write!(&mut ret, "{b:02x}").expect("write OK");
}
ret
}
}
#[must_use] pubfn hex_with_len<A: AsRef<[u8]>>(buf: A) -> String { let buf = buf.as_ref(); letmut ret = String::with_capacity(10 + buf.len() * 2);
write!(&mut ret, "[{}]: ", buf.len()).expect("write OK"); for b in buf {
write!(&mut ret, "{b:02x}").expect("write OK");
}
ret
}
#[must_use] pubconstfn const_max(a: usize, b: usize) -> usize {
[a, b][(a <= b) as usize]
} #[must_use] pubconstfn const_min(a: usize, b: usize) -> usize {
[a, b][(a > b) as usize]
}
#[derive(Debug, PartialEq, Eq, Copy, Clone, Enum, Display)] /// Client or Server. pubenum Role {
Client,
Server,
}
#[test] fn hex_snip_middle_boundary() { // Exactly SHOW_LEN*2 = 16 bytes: should use full hex (no ".."). let short: Vec<u8> = (0..16).collect(); let s = hex_snip_middle(&short);
assert!(!s.contains(".."), "16 bytes should not be truncated");
assert!(s.ends_with("0e0f"));
// 17 bytes: one over the boundary, should be truncated. let just_over: Vec<u8> = (0..17).collect();
assert!(hex_snip_middle(&just_over).contains(".."));
// 20 bytes: truncated, check first 8 and last 8 bytes are exact. let long: Vec<u8> = (0..20).collect(); let s = hex_snip_middle(&long);
assert!(s.starts_with("[20]: 0001020304050607"));
assert!(s.contains("..")); // Last 8 bytes (12..20 = 0x0c..0x13) must be exactly "0c0d0e0f10111213".
assert!(s.ends_with("0c0d0e0f10111213"));
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.