Skip to main content

hegel/extras/chrono/
default.rs

1use 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}