1#![forbid(unsafe_code)]
15#![warn(missing_docs)]
16
17pub use interval::Interval;
18pub use ops::Operations;
19
20use crate::impls::Item;
21use crate::interval::IntervalType;
22use std::marker::PhantomData;
23
24pub(crate) mod helpers;
25pub(crate) mod impls;
26pub mod interval;
27pub(crate) mod iter;
28pub mod ops;
29
30pub struct Portion<T: Item> {
32 data: PhantomData<T>,
33}
34
35impl<T: Item> Portion<T> {
36 pub fn open(lower: T, upper: T) -> Interval<T> {
38 Interval {
39 lower: Some(lower),
40 upper: Some(upper),
41 itype: IntervalType::Open,
42 }
43 }
44
45 pub fn closed(lower: T, upper: T) -> Interval<T> {
47 Interval {
48 lower: Some(lower),
49 upper: Some(upper),
50 itype: IntervalType::Closed,
51 }
52 }
53
54 pub fn empty() -> Interval<T> {
56 Interval {
57 lower: None,
58 upper: None,
59 itype: IntervalType::Empty,
60 }
61 }
62
63 pub fn singleton(value: T) -> Interval<T> {
65 Interval {
66 lower: Some(value),
67 upper: None,
68 itype: IntervalType::Singleton,
69 }
70 }
71
72 pub fn openclosed(lower: T, upper: T) -> Interval<T> {
74 Interval {
75 lower: Some(lower),
76 upper: Some(upper),
77 itype: IntervalType::OpenClosed,
78 }
79 }
80
81 pub fn closedopen(lower: T, upper: T) -> Interval<T> {
83 Interval {
84 lower: Some(lower),
85 upper: Some(upper),
86 itype: IntervalType::ClosedOpen,
87 }
88 }
89}