hegel/extras/chrono/
default.rs1use chrono::{
2 DateTime, Datelike, Days, FixedOffset, IsoWeek, Month, Months, NaiveDate, NaiveDateTime,
3 NaiveTime, NaiveWeek, TimeDelta, Utc, Weekday, WeekdaySet,
4};
5
6use crate::generators::{
7 DefaultGenerator, Generator, IntegerGenerator, JustGenerator, Mapped, integers, just,
8};
9
10use super::{
11 DateTimeGenerator, FixedOffsetGenerator, NaiveDateGenerator, NaiveDateTimeGenerator,
12 NaiveTimeGenerator, NaiveWeekGenerator, TimeDeltaGenerator, WeekdaySetGenerator, datetimes,
13 fixed_offsets, naive_dates, naive_datetimes, naive_times, naive_weeks, time_deltas,
14 weekday_sets,
15};
16
17impl DefaultGenerator for Weekday {
18 type Generator = Mapped<u8, Weekday, fn(u8) -> Weekday, IntegerGenerator<u8>>;
19 fn default_generator() -> Self::Generator {
20 integers::<u8>()
21 .min_value(0)
22 .max_value(6)
23 .map(|n| Weekday::try_from(n).unwrap())
24 }
25}
26
27impl DefaultGenerator for Month {
28 type Generator = Mapped<u8, Month, fn(u8) -> Month, IntegerGenerator<u8>>;
29 fn default_generator() -> Self::Generator {
30 integers::<u8>()
31 .min_value(1)
32 .max_value(12)
33 .map(|n| Month::try_from(n).unwrap())
34 }
35}
36
37impl DefaultGenerator for Days {
38 type Generator = Mapped<u64, Days, fn(u64) -> Days, IntegerGenerator<u64>>;
39 fn default_generator() -> Self::Generator {
40 integers::<u64>().map(Days::new)
41 }
42}
43
44impl DefaultGenerator for Months {
45 type Generator = Mapped<u32, Months, fn(u32) -> Months, IntegerGenerator<u32>>;
46 fn default_generator() -> Self::Generator {
47 integers::<u32>().map(Months::new)
48 }
49}
50
51impl DefaultGenerator for IsoWeek {
52 type Generator = Mapped<NaiveDate, IsoWeek, fn(NaiveDate) -> IsoWeek, NaiveDateGenerator>;
53 fn default_generator() -> Self::Generator {
54 naive_dates().map(|d| d.iso_week())
55 }
56}
57
58impl DefaultGenerator for NaiveWeek {
59 type Generator = NaiveWeekGenerator<<Weekday as DefaultGenerator>::Generator>;
60 fn default_generator() -> Self::Generator {
61 naive_weeks()
62 }
63}
64
65impl DefaultGenerator for WeekdaySet {
66 type Generator = WeekdaySetGenerator;
67 fn default_generator() -> Self::Generator {
68 weekday_sets()
69 }
70}
71
72impl DefaultGenerator for FixedOffset {
73 type Generator = FixedOffsetGenerator;
74 fn default_generator() -> Self::Generator {
75 fixed_offsets()
76 }
77}
78
79impl DefaultGenerator for TimeDelta {
80 type Generator = TimeDeltaGenerator;
81 fn default_generator() -> Self::Generator {
82 time_deltas()
83 }
84}
85
86impl DefaultGenerator for NaiveDate {
87 type Generator = NaiveDateGenerator;
88 fn default_generator() -> Self::Generator {
89 naive_dates()
90 }
91}
92
93impl DefaultGenerator for NaiveTime {
94 type Generator = NaiveTimeGenerator;
95 fn default_generator() -> Self::Generator {
96 naive_times()
97 }
98}
99
100impl DefaultGenerator for NaiveDateTime {
101 type Generator = NaiveDateTimeGenerator;
102 fn default_generator() -> Self::Generator {
103 naive_datetimes()
104 }
105}
106
107impl DefaultGenerator for DateTime<Utc> {
108 type Generator = DateTimeGenerator<JustGenerator<Utc>, Utc>;
109 fn default_generator() -> Self::Generator {
110 datetimes().timezones(just(Utc))
111 }
112}
113
114impl DefaultGenerator for DateTime<FixedOffset> {
115 type Generator = DateTimeGenerator<FixedOffsetGenerator, FixedOffset>;
116 fn default_generator() -> Self::Generator {
117 datetimes()
118 }
119}