1use core::fmt::Display;
4
5#[derive(Debug, Clone, PartialEq)]
11pub enum Error {
12 InvalidAngle(f64, f64),
14 InvalidLatitudeDegrees(i32),
16 InvalidLongitudeDegrees(i32),
18 InvalidMinutes(u32),
20 InvalidSeconds(f32),
22 InvalidCharacter(char, String),
24 InvalidWhitespace(String),
26 InvalidNumericFormat(String),
28 InvalidNumericValue(f64),
30 InvalidCoordinate,
32 #[cfg(feature = "urn")]
34 InvalidUrnScheme,
35}
36
37impl Display for Error {
42 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
43 match self {
44 Error::InvalidAngle(v, limit) => write!(
45 f,
46 "Invalid value `{v}` for angle; expecting `-{limit}..={limit}`."
47 ),
48 Error::InvalidLatitudeDegrees(v) => write!(
49 f,
50 "Invalid value `{v}` for latitude degrees; expecting `-90..=90`."
51 ),
52 Error::InvalidLongitudeDegrees(v) => write!(
53 f,
54 "Invalid value `{v}` for longitude degrees; expecting `-180..=180`."
55 ),
56 Error::InvalidMinutes(v) => {
57 write!(f, "Invalid value `{v}` for minutes; expecting `0..60`.")
58 }
59 Error::InvalidSeconds(v) => {
60 write!(f, "Invalid value `{v}` for seconds; expecting `0.0..60.0`.")
61 }
62 Error::InvalidCharacter(c, s) => {
63 write!(f, "Invalid character `{c}` parsing value `\"{s}\"`.")
64 }
65 Error::InvalidWhitespace(s) => {
66 write!(f, "Invalid whitespace parsing value `\"{s}\"`.")
67 }
68 Error::InvalidNumericFormat(s) => {
69 write!(f, "Invalid numeric format parsing value `\"{s}\"`.")
70 }
71 Error::InvalidCoordinate => {
72 write!(
73 f,
74 "Invalid `Latitude` and `Longitude` pair constructing `Coordinate`."
75 )
76 }
77 #[cfg(feature = "url")]
78 Error::InvalidUrnScheme => write!(f, "URI scheme must be `geo:`."),
79 Error::InvalidNumericValue(v) => write!(f, "Invalid floating point value, `{v}`"),
80 }
81 }
82}
83
84impl std::error::Error for Error {}