use std::marker::PhantomData;
pub trait Compare<T> {
fn compare(left: &T, right: &T) -> bool;
}
pub struct Greater<T> {
_pad: u8,
_marker: PhantomData<T>,
}
impl<T: PartialOrd> Compare<T> for Greater<T> {
fn compare(left: &T, right: &T) -> bool {
left > right
}
}
impl<T> Default for Greater<T> {
fn default() -> Self {
Self {
_pad: 0,
_marker: PhantomData,
}
}
}
pub struct Less<T> {
_pad: u8,
_marker: PhantomData<T>,
}
impl<T: PartialOrd> Less<T> {
pub const fn new() -> Self {
Self {
_pad: 0,
_marker: PhantomData,
}
}
}
impl<T: PartialOrd> Compare<T> for Less<T> {
fn compare(left: &T, right: &T) -> bool {
left < right
}
}
impl<T: PartialOrd> Default for Less<T> {
fn default() -> Self {
Self::new()
}
}