1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
mod error;

// General operators
mod and;
mod implies;
mod not;
mod or;

// Temporal-specific operators
mod always;
mod eventually;
mod freeze;
mod next;
mod until;

// Re-export module members to make them public
pub use always::Always;
pub use and::And;
pub use eventually::Eventually;
pub use implies::Implies;
pub use next::Next;
pub use not::Not;
pub use or::Or;

use ordered_float::NotNan;

pub struct Bounds {
    pub lower: NotNan<f64>,
    pub upper: NotNan<f64>,
}

impl From<(f64, f64)> for Bounds {
    fn from((lower, upper): (f64, f64)) -> Self {
        Self {
            lower: NotNan::try_from(lower).unwrap(),
            upper: NotNan::try_from(upper).unwrap(),
        }
    }
}