1use std::fmt;
5use crate::image::GUID;
6
7#[inline(always)]
8fn group(guid: &GUID) -> (u32, u16, u16, u16, u64) {
9 let g1 = guid.Data1;
10 let g2 = guid.Data2;
11 let g3 = guid.Data3;
12 let g4 = (guid.Data4[0] as u16) << 8 | guid.Data4[1] as u16;
14 let g5 =
15 (guid.Data4[2] as u64) << 8*5 | (guid.Data4[3] as u64) << 8*4 |
16 (guid.Data4[4] as u64) << 8*3 | (guid.Data4[5] as u64) << 8*2 |
17 (guid.Data4[6] as u64) << 8*1 | (guid.Data4[7] as u64) << 8*0;
18 (g1, g2, g3, g4, g5)
19}
20
21fn lower_dashed(guid: &GUID, f: &mut fmt::Formatter) -> fmt::Result {
22 let (g1, g2, g3, g4, g5) = group(guid);
23 write!(f, "{{{:08x}-{:04x}-{:04x}-{:04x}-{:012x}}}", g1, g2, g3, g4, g5)
24}
25fn lower_hex(guid: &GUID, f: &mut fmt::Formatter) -> fmt::Result {
30 let (g1, g2, g3, g4, g5) = group(guid);
31 write!(f, "{:08x}{:04x}{:04x}{:04x}{:012x}", g1, g2, g3, g4, g5)
32}
33fn upper_hex(guid: &GUID, f: &mut fmt::Formatter) -> fmt::Result {
34 let (g1, g2, g3, g4, g5) = group(guid);
35 write!(f, "{:08X}{:04X}{:04X}{:04X}{:012X}", g1, g2, g3, g4, g5)
36}
37
38impl fmt::Display for GUID {
40 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
41 lower_dashed(self, f)
42 }
43}
44impl fmt::Debug for GUID {
46 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
47 lower_dashed(self, f)
48 }
49}
50impl fmt::LowerHex for GUID {
52 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
53 lower_hex(self, f)
54 }
55}
56impl fmt::UpperHex for GUID {
58 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
59 upper_hex(self, f)
60 }
61}
62
63#[cfg(feature = "serde")]
64impl serde::Serialize for GUID {
65 fn serialize<S: serde::Serializer>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error> {
66 serializer.collect_str(self)
67 }
68}