jiff/error/tz/
ambiguous.rs

1use crate::{
2    error,
3    tz::{Offset, TimeZone},
4};
5
6#[derive(Clone, Debug)]
7pub(crate) enum Error {
8    BecauseFold { before: Offset, after: Offset },
9    BecauseGap { before: Offset, after: Offset },
10    InTimeZone { tz: TimeZone },
11}
12
13impl From<Error> for error::Error {
14    #[cold]
15    #[inline(never)]
16    fn from(err: Error) -> error::Error {
17        error::ErrorKind::TzAmbiguous(err).into()
18    }
19}
20
21impl error::IntoError for Error {
22    fn into_error(self) -> error::Error {
23        self.into()
24    }
25}
26
27impl core::fmt::Display for Error {
28    fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
29        use self::Error::*;
30
31        match *self {
32            BecauseFold { before, after } => write!(
33                f,
34                "datetime is ambiguous since it falls into a \
35                 fold between offsets {before} and {after}",
36            ),
37            BecauseGap { before, after } => write!(
38                f,
39                "datetime is ambiguous since it falls into a \
40                 gap between offsets {before} and {after}",
41            ),
42            InTimeZone { ref tz } => write!(
43                f,
44                "error converting datetime to instant in time zone {tz}",
45                tz = tz.diagnostic_name(),
46            ),
47        }
48    }
49}