From 880afa7bc3899c80af4bb1fe94cff7205ae93e34 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Mon, 13 Oct 2025 15:35:56 +0900 Subject: [PATCH] common/types: add debug assertions for range orders --- src/common/types/one_or_range.rs | 6 +++++- src/common/types/time_interval.rs | 21 +++++++++++++++++---- src/common/types/window_range.rs | 13 ++++++++----- 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/src/common/types/one_or_range.rs b/src/common/types/one_or_range.rs index 388a280..8a7a0bd 100644 --- a/src/common/types/one_or_range.rs +++ b/src/common/types/one_or_range.rs @@ -17,7 +17,11 @@ impl FromStr for OneOrRange { let mut parts = s.split(':'); let start = parts.next().ok_or(())?.parse().map_err(|_| ())?; Ok(match parts.next() { - Some(end) => Self::Range(start, end.parse().map_err(|_| ())?), + Some(end) => { + let end = end.parse().map_err(|_| ())?; + debug_assert!(start <= end); + Self::Range(start, end) + } None => Self::One(start), }) } diff --git a/src/common/types/time_interval.rs b/src/common/types/time_interval.rs index 281bd7b..a0526ff 100644 --- a/src/common/types/time_interval.rs +++ b/src/common/types/time_interval.rs @@ -15,11 +15,24 @@ impl FromStr for TimeInterval { fn from_str(s: &str) -> Result { let mut parts = s.split(':'); - let start = parts.next().map(|s| s.parse().map_err(|_| ())); - let end = parts.next().map(|s| s.parse().map_err(|_| ())); + let start = parts + .next() + .map(|s| s.parse().map_err(|_| ())) + .transpose()?; + let end = parts + .next() + .map(|s| s.parse().map_err(|_| ())) + .transpose()?; + + if let Some(start) = start + && let Some(end) = end + { + debug_assert!(start <= end); + } + Ok(Self { - start: start.transpose()?, - end: end.transpose()?, + start: start, + end: end, }) } } diff --git a/src/common/types/window_range.rs b/src/common/types/window_range.rs index c869e86..59a5c34 100644 --- a/src/common/types/window_range.rs +++ b/src/common/types/window_range.rs @@ -16,10 +16,13 @@ impl FromStr for WindowRange { fn from_str(s: &str) -> Result { let mut parts = s.split(':'); let start = parts.next().ok_or(())?.parse().map_err(|_| ())?; - let end = parts.next().map(|s| s.parse().map_err(|_| ())); - Ok(Self { - start, - end: end.transpose()?, - }) + let end = parts + .next() + .map(|s| s.parse().map_err(|_| ())) + .transpose()?; + + debug_assert!(end.is_none_or(|end| end >= start)); + + Ok(Self { start, end: end }) } }