time_range_ext/
time_range.rs1use time::OffsetDateTime;
2
3#[cfg(feature = "serde")]
4use serde::{Deserialize, Serialize};
5
6pub mod vec_range;
7pub mod time_range_ext;
8
9#[derive(Debug, Eq, PartialEq, Clone, Copy)]
10#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
11pub struct TimeRange {
12 #[cfg_attr(feature = "serde", serde(with = "time::serde::rfc3339"))]
13 pub start: OffsetDateTime,
14 #[cfg_attr(feature = "serde", serde(with = "time::serde::rfc3339"))]
15 pub end: OffsetDateTime,
16}
17
18impl TimeRange {
19 pub fn duration(&self) -> time::Duration {
20 self.end - self.start
21 }
22
23 pub fn from(start: OffsetDateTime, end: OffsetDateTime) -> Self {
24 TimeRange { start, end }
25 }
26
27 pub fn overlaps(&self, other: &TimeRange) -> bool {
28 self.start <= other.end && other.start <= self.end
29 }
30
31 pub fn merge(&self, other: &TimeRange) -> TimeRange {
32 TimeRange {
33 start: self.start.min(other.start),
34 end: self.end.max(other.end),
35 }
36 }
37}