1use arbitrary::{Arbitrary, Result, Unstructured};
2use arbitrary_with::ArbitraryAs;
3
4use crate::{Overflow, Timestamp};
5
6impl<'a> Arbitrary<'a> for Timestamp {
7 #[inline]
8 fn arbitrary(u: &mut Unstructured<'a>) -> Result<Self> {
9 let nanos = u.int_in_range(Self::MIN.as_nanos()..=Self::MAX.as_nanos())?;
10 Ok(Self::from_nanos(nanos).ok_or(Overflow).unwrap())
11 }
12}
13
14pub struct RangeNanos<const FROM: i128, const TO: i128 = { Timestamp::MAX.as_nanos() }>;
15
16impl<'a, const FROM: i128, const TO: i128> ArbitraryAs<'a, Timestamp> for RangeNanos<FROM, TO> {
17 #[inline]
18 fn arbitrary_as(u: &mut Unstructured<'a>) -> Result<Timestamp> {
19 let nanos = u.int_in_range(FROM..=TO)?;
20 Ok(Timestamp::from_nanos(nanos).ok_or(Overflow).unwrap())
21 }
22}