use crate::PartialOrderBehaviour;
use std::marker::PhantomData;
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct PartialOrder<T, F>
where
F: Fn(&T, &T) -> bool,
{
ge: F,
_marker: PhantomData<T>,
}
impl<T, F> PartialOrderBehaviour for PartialOrder<T, F>
where
F: Fn(&T, &T) -> bool,
{
type Element = T;
fn ge(&self, a: &T, b: &T) -> bool {
(self.ge)(a, b)
}
}
impl<T, F> PartialOrder<T, F>
where
F: Fn(&T, &T) -> bool,
{
pub fn new(ge: F) -> PartialOrder<T, F> {
PartialOrder {
ge,
_marker: PhantomData,
}
}
}