1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use rand::distributions::{Distribution, Standard};
use rand::Rng;

use crate::CalendarDuration;
use crate::{InComplete, InDate, InOffsetDateTime, InPrimitiveDateTime, InTime};

impl Distribution<CalendarDuration> for Standard {
    fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> CalendarDuration {
        let min = CalendarDuration::MIN.whole_months();
        let max = CalendarDuration::MAX.whole_months();
        CalendarDuration::months(rng.gen_range(min..=max))
    }
}

impl Distribution<InDate> for Standard {
    fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> InDate {
        InDate::from_complete(Self.sample(rng))
    }
}

impl Distribution<InTime> for Standard {
    fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> InTime {
        InTime::from_complete(Self.sample(rng))
    }
}

impl Distribution<InPrimitiveDateTime> for Standard {
    fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> InPrimitiveDateTime {
        InPrimitiveDateTime::from_complete(Self.sample(rng))
    }
}

impl Distribution<InOffsetDateTime> for Standard {
    fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> InOffsetDateTime {
        InOffsetDateTime::from_complete(Self.sample(rng))
    }
}