hegel/extras/jiff/
default.rs1use jiff::civil::{Date, DateTime, ISOWeekDate, Time};
2use jiff::tz::{AmbiguousOffset, Offset, TimeZone};
3use jiff::{SignedDuration, Span, Timestamp, Zoned};
4
5use crate::generators::{self as gs, BoxedGenerator, DefaultGenerator, Generator, Mapped, one_of};
6
7use super::{
8 DateGenerator, DateTimeGenerator, OffsetGenerator, SignedDurationGenerator, SpanGenerator,
9 TimeGenerator, TimestampGenerator, ZonedGenerator, dates, datetimes, offsets, signed_durations,
10 spans, times, timestamps, zoneds,
11};
12
13impl DefaultGenerator for Date {
14 type Generator = DateGenerator;
15 fn default_generator() -> Self::Generator {
16 dates()
17 }
18}
19
20impl DefaultGenerator for Time {
21 type Generator = TimeGenerator;
22 fn default_generator() -> Self::Generator {
23 times()
24 }
25}
26
27impl DefaultGenerator for DateTime {
28 type Generator = DateTimeGenerator;
29 fn default_generator() -> Self::Generator {
30 datetimes()
31 }
32}
33
34impl DefaultGenerator for ISOWeekDate {
35 type Generator = Mapped<Date, ISOWeekDate, fn(Date) -> ISOWeekDate, DateGenerator>;
36 fn default_generator() -> Self::Generator {
37 dates().map(|d| d.iso_week_date())
38 }
39}
40
41impl DefaultGenerator for Timestamp {
42 type Generator = TimestampGenerator;
43 fn default_generator() -> Self::Generator {
44 timestamps()
45 }
46}
47
48impl DefaultGenerator for Span {
49 type Generator = SpanGenerator;
50 fn default_generator() -> Self::Generator {
51 spans()
52 }
53}
54
55impl DefaultGenerator for SignedDuration {
56 type Generator = SignedDurationGenerator;
57 fn default_generator() -> Self::Generator {
58 signed_durations()
59 }
60}
61
62impl DefaultGenerator for Offset {
63 type Generator = OffsetGenerator;
64 fn default_generator() -> Self::Generator {
65 offsets()
66 }
67}
68
69impl DefaultGenerator for TimeZone {
70 type Generator = BoxedGenerator<'static, TimeZone>;
71 fn default_generator() -> Self::Generator {
72 one_of([
73 gs::just::<TimeZone>(TimeZone::UTC).boxed(),
74 gs::just::<TimeZone>(TimeZone::unknown()).boxed(),
75 offsets().map(TimeZone::fixed).boxed(),
76 ])
77 .boxed()
78 }
79}
80
81impl DefaultGenerator for Zoned {
82 type Generator = ZonedGenerator;
83 fn default_generator() -> Self::Generator {
84 zoneds()
85 }
86}
87
88impl DefaultGenerator for AmbiguousOffset {
89 type Generator = BoxedGenerator<'static, AmbiguousOffset>;
90 fn default_generator() -> Self::Generator {
91 use crate::tuples;
92 one_of([
93 offsets()
94 .map(|offset| AmbiguousOffset::Unambiguous { offset })
95 .boxed(),
96 tuples!(offsets(), offsets())
97 .map(|(before, after)| AmbiguousOffset::Gap { before, after })
98 .boxed(),
99 tuples!(offsets(), offsets())
100 .map(|(before, after)| AmbiguousOffset::Fold { before, after })
101 .boxed(),
102 ])
103 .boxed()
104 }
105}