@@ -6,7 +6,10 @@ pub mod metadata;
66pub mod symbology;
77pub mod timeseries;
88
9- use std:: num:: NonZeroU64 ;
9+ use std:: {
10+ num:: NonZeroU64 ,
11+ ops:: { Range , RangeInclusive } ,
12+ } ;
1013
1114pub use client:: * ;
1215use serde:: Deserialize ;
@@ -57,6 +60,24 @@ pub struct DateTimeRange {
5760 pub end : time:: OffsetDateTime ,
5861}
5962
63+ impl From < Range < time:: Date > > for DateRange {
64+ fn from ( range : Range < time:: Date > ) -> Self {
65+ Self {
66+ start : range. start ,
67+ end : range. end ,
68+ }
69+ }
70+ }
71+
72+ impl From < RangeInclusive < time:: Date > > for DateRange {
73+ fn from ( range : RangeInclusive < time:: Date > ) -> Self {
74+ Self {
75+ start : * range. start ( ) ,
76+ end : range. end ( ) . next_day ( ) . unwrap ( ) ,
77+ }
78+ }
79+ }
80+
6081impl From < ( time:: Date , time:: Date ) > for DateRange {
6182 fn from ( value : ( time:: Date , time:: Date ) ) -> Self {
6283 Self {
@@ -75,6 +96,36 @@ impl From<(time::Date, time::Duration)> for DateRange {
7596 }
7697}
7798
99+ impl From < Range < time:: Date > > for DateTimeRange {
100+ fn from ( range : Range < time:: Date > ) -> Self {
101+ Self :: from ( DateRange :: from ( range) )
102+ }
103+ }
104+
105+ impl From < RangeInclusive < time:: Date > > for DateTimeRange {
106+ fn from ( range : RangeInclusive < time:: Date > ) -> Self {
107+ Self :: from ( DateRange :: from ( range) )
108+ }
109+ }
110+
111+ impl From < Range < time:: OffsetDateTime > > for DateTimeRange {
112+ fn from ( range : Range < time:: OffsetDateTime > ) -> Self {
113+ Self {
114+ start : range. start ,
115+ end : range. end ,
116+ }
117+ }
118+ }
119+
120+ impl From < RangeInclusive < time:: OffsetDateTime > > for DateTimeRange {
121+ fn from ( range : RangeInclusive < time:: OffsetDateTime > ) -> Self {
122+ Self {
123+ start : * range. start ( ) ,
124+ end : * range. end ( ) + time:: Duration :: NANOSECOND ,
125+ }
126+ }
127+ }
128+
78129impl From < ( time:: Date , time:: Duration ) > for DateTimeRange {
79130 fn from ( value : ( time:: Date , time:: Duration ) ) -> Self {
80131 Self :: from ( DateRange :: from ( value) )
@@ -266,6 +317,14 @@ mod tests {
266317 DateRange :: from( date) ,
267318 DateRange :: from( ( date!( 2025 - 03 - 27 ) , date!( 2025 - 03 - 28 ) ) )
268319 ) ;
320+ assert_eq ! (
321+ DateRange :: from( date) ,
322+ DateRange :: from( date!( 2025 - 03 - 27 ) ..date!( 2025 - 03 - 28 ) )
323+ ) ;
324+ assert_eq ! (
325+ DateRange :: from( date) ,
326+ DateRange :: from( date!( 2025 - 03 - 27 ) ..=date!( 2025 - 03 - 27 ) )
327+ ) ;
269328 assert_eq ! (
270329 DateTimeRange :: from( date) ,
271330 DateTimeRange :: from( (
0 commit comments