intervalsets 0.1.0-alpha.2

The intervalsets crate provides bounded and unbounded intervals implemented as sets with all the associated set operations.
Documentation
use std::hash::Hash;

use super::{BoundCase, Finite, HalfBounded};

impl<T: Hash> Hash for Finite<T> {
    fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
        match self {
            Self::Empty => "Finite::Empty".hash(state),
            Self::FullyBounded(left, right) => {
                "Finite::FullyBounded".hash(state);
                left.hash(state);
                right.hash(state);
            }
        }
    }
}

impl<T: Hash> Hash for HalfBounded<T> {
    fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
        "HalfBounded".hash(state);
        self.side.hash(state);
        self.bound.hash(state);
    }
}

impl<T: Hash> Hash for BoundCase<T> {
    fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
        match self {
            Self::Finite(inner) => {
                "BoundCase::Finite".hash(state);
                inner.hash(state);
            }
            Self::Half(inner) => {
                "BoundCase::Half".hash(state);
                inner.hash(state);
            }
            Self::Unbounded => {
                "BoundCase::Unbounded".hash(state);
            }
        }
    }
}