1 // Copyright 2022 Google LLC
2 //
3 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
4 // https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
5 // <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
6 // option. This file may not be copied, modified, or distributed
7 // except according to those terms.
8 
9 use core::fmt::{self, Display, Formatter};
10 
11 /// Error type for [`Guid::try_parse`] and [`Guid::from_str`].
12 ///
13 /// If the `std` feature is enabled, this type implements the [`Error`]
14 /// trait.
15 ///
16 /// [`Error`]: std::error::Error
17 /// [`Guid::from_str`]: core::str::FromStr::from_str
18 /// [`Guid::try_parse`]: crate::Guid::try_parse
19 #[derive(Clone, Copy, Debug, Eq, PartialEq, Hash, Ord, PartialOrd)]
20 pub enum GuidFromStrError {
21     /// Input has the wrong length, expected 36 bytes.
22     Length,
23 
24     /// Input is missing a separator (`-`) at this byte index.
25     Separator(u8),
26 
27     /// Input contains invalid ASCII hex at this byte index.
28     Hex(u8),
29 }
30 
31 impl Default for GuidFromStrError {
default() -> Self32     fn default() -> Self {
33         Self::Length
34     }
35 }
36 
37 impl Display for GuidFromStrError {
fmt(&self, f: &mut Formatter<'_>) -> fmt::Result38     fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
39         match self {
40             Self::Length => {
41                 f.write_str("GUID string has wrong length (expected 36 bytes)")
42             }
43             Self::Separator(index) => write!(
44                 f,
45                 "GUID string is missing a separator (`-`) at index {index}",
46             ),
47             Self::Hex(index) => {
48                 write!(
49                     f,
50                     "GUID string contains invalid ASCII hex at index {index}",
51                 )
52             }
53         }
54     }
55 }
56