#[cfg(not(feature = "serde"))]
mod without_serde {
#[derive(Debug, Copy, Clone, PartialEq)]
pub struct BoundPair<T> {
pub(crate) left: T,
pub(crate) right: T,
}
}
#[cfg(feature = "serde")]
mod with_serde {
use serde::{Deserialize, Serialize};
#[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize)]
pub struct BoundPair<T> {
pub(crate) left: T,
pub(crate) right: T,
}
}
#[cfg(feature = "serde")]
pub use with_serde::BoundPair;
#[cfg(not(feature = "serde"))]
pub use without_serde::BoundPair;
impl<T> BoundPair<T>
where
T: Copy,
T: PartialOrd,
{
pub fn new(left: T, right: T) -> Option<BoundPair<T>> {
if left >= right {
None
} else {
Some(BoundPair { left, right })
}
}
pub fn left(&self) -> &T {
&self.left
}
pub fn right(&self) -> &T {
&self.right
}
}