Skip to main content

dsntk_feel/
ranges.rs

1//! # Types of range intervals.
2
3/// Enumeration of range interval types.
4#[derive(Debug, Copy, Clone, PartialEq, Eq)]
5pub enum IntervalType {
6  /// Open-end interval with defined value, like `(1..`, `..10)`, `]1..` or `..10[`.
7  Opened,
8  /// Open-end interval without value, like `(..`, `..)`, `]..` or `..[`.
9  OpenedUndef,
10  /// Closed-end interval with defined value, like `[1..` or `..10]`.
11  Closed,
12  /// Closed-end interval without value, like `[..` or `..]`.
13  ClosedUndef,
14}
15
16impl std::fmt::Display for IntervalType {
17  fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
18    write!(
19      f,
20      "{}",
21      match self {
22        IntervalType::Opened => "opened",
23        IntervalType::OpenedUndef => "opened,undefined",
24        IntervalType::Closed => "closed",
25        IntervalType::ClosedUndef => "closed,undefined",
26      }
27    )
28  }
29}
30
31impl IntervalType {
32  /// Return `true` when the interval is opened.
33  pub fn opened(&self) -> bool {
34    matches!(self, IntervalType::Opened | IntervalType::OpenedUndef)
35  }
36
37  /// Return `true` when the interval is closed.
38  pub fn closed(&self) -> bool {
39    matches!(self, IntervalType::Closed | IntervalType::ClosedUndef)
40  }
41
42  /// Return `true` when the interval has no value defined.
43  pub fn undefined(&self) -> bool {
44    matches!(self, IntervalType::OpenedUndef | IntervalType::ClosedUndef)
45  }
46}