1use std::fmt::{Display, LowerHex};
2
3use crate::Endianness;
4
5pub fn hex<Value: LowerHex>(value: Value) -> String {
6 format!("{:x}", value)
7}
8
9pub fn decimal<Value: Display>(value: Value) -> String {
10 format!("{}", value)
11}
12
13pub fn p8(value: u8) -> Vec<u8> {
14 vec![value]
15}
16
17pub fn unhex8(value: &[u8]) -> u8 {
18 u8::from_str_radix(String::from_utf8_lossy(&value[2..]).as_ref(), 16).unwrap()
19}
20
21pub fn u8(value: &[u8]) -> u8 {
22 value[0]
23}
24
25pub fn p16(value: u16, endianness: Endianness) -> [u8; 2] {
26 match endianness {
27 Endianness::Little => value.to_le_bytes(),
28 Endianness::Big => value.to_be_bytes(),
29 }
30}
31
32pub fn unhex16(value: &[u8]) -> u16 {
33 u16::from_str_radix(String::from_utf8_lossy(&value[2..]).as_ref(), 16).unwrap()
34}
35
36pub fn u16(value: &[u8], endianness: Endianness) -> u16 {
37 match endianness {
38 Endianness::Little => {
39 u16::from_le_bytes(value.try_into().expect("byte array not big enough"))
40 }
41 Endianness::Big => u16::from_be_bytes(value.try_into().expect("byte array not big enough")),
42 }
43}
44
45pub fn p32(value: u32, endianness: Endianness) -> [u8; 4] {
46 match endianness {
47 Endianness::Little => value.to_le_bytes(),
48 Endianness::Big => value.to_be_bytes(),
49 }
50}
51
52pub fn unhex32(value: &[u8]) -> u32 {
53 u32::from_str_radix(String::from_utf8_lossy(&value[2..]).as_ref(), 16).unwrap()
54}
55
56pub fn u32(value: &[u8], endianness: Endianness) -> u32 {
57 match endianness {
58 Endianness::Little => {
59 u32::from_le_bytes(value.try_into().expect("byte array not big enough"))
60 }
61 Endianness::Big => u32::from_be_bytes(value.try_into().expect("byte array not big enough")),
62 }
63}
64
65pub fn p64(value: u64, endianness: Endianness) -> [u8; 8] {
66 match endianness {
67 Endianness::Little => value.to_le_bytes(),
68 Endianness::Big => value.to_be_bytes(),
69 }
70}
71
72pub fn unhex64(value: &[u8]) -> u64 {
73 u64::from_str_radix(String::from_utf8_lossy(&value[2..]).as_ref(), 16).unwrap()
74}
75
76pub fn u64(value: &[u8], endianness: Endianness) -> u64 {
77 match endianness {
78 Endianness::Little => {
79 u64::from_le_bytes(value.try_into().expect("byte array not big enough"))
80 }
81 Endianness::Big => u64::from_be_bytes(value.try_into().expect("byte array not big enough")),
82 }
83}
84
85pub fn p128(value: u128, endianness: Endianness) -> [u8; 16] {
86 match endianness {
87 Endianness::Little => value.to_le_bytes(),
88 Endianness::Big => value.to_be_bytes(),
89 }
90}
91
92pub fn unhex128(value: &[u8]) -> u128 {
93 u128::from_str_radix(String::from_utf8_lossy(&value[2..]).as_ref(), 16).unwrap()
94}
95
96pub fn u128(value: &[u8], endianness: Endianness) -> u128 {
97 match endianness {
98 Endianness::Little => {
99 u128::from_le_bytes(value.try_into().expect("byte array not big enough"))
100 }
101 Endianness::Big => {
102 u128::from_be_bytes(value.try_into().expect("byte array not big enough"))
103 }
104 }
105}