use std::ops::RangeBounds;
use crate::{integer::NumericInteger, range_to_bounds};
#[derive(PartialEq, Eq, Hash, Clone, Copy, Debug, PartialOrd, Ord)]
pub struct AnyRange<T: NumericInteger>((T, T));
impl<T: NumericInteger> AnyRange<T> {
pub fn new(min: T, max: T) -> AnyRange<T> {
AnyRange((min, max))
}
pub fn from<R: RangeBounds<T>>(range: R) -> AnyRange<T> {
match range_to_bounds(&range) {
Some(bounds) => AnyRange(bounds),
None => AnyRange((T::max_value(), T::min_value())),
}
}
pub fn get_bounds(&self) -> &(T, T) {
&self.0
}
pub fn is_empty(&self) -> bool {
let (min, max) = self.0;
min > max
}
}