use std::cmp::Ordering;
#[derive(Eq, PartialEq, Ord, PartialOrd, Copy, Clone)]
pub enum Priority {
Valued(u32),
Shutdown,
}
impl Default for Priority {
fn default() -> Self {
Priority::Valued(0)
}
}
pub trait HasPriority {
fn priority(&self) -> Priority;
}
pub struct ByPriority<T>(pub T);
impl<T> HasPriority for ByPriority<T>
where
T: HasPriority,
{
fn priority(&self) -> Priority {
self.0.priority()
}
}
impl<T> PartialEq for ByPriority<T>
where
T: HasPriority,
{
fn eq(&self, other: &Self) -> bool {
self.0.priority().eq(&other.0.priority())
}
}
impl<T> Eq for ByPriority<T> where T: HasPriority {}
impl<T> PartialOrd for ByPriority<T>
where
T: HasPriority,
{
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
Some(self.cmp(other))
}
}
impl<T> Ord for ByPriority<T>
where
T: HasPriority,
{
fn cmp(&self, other: &Self) -> Ordering {
self.0.priority().cmp(&other.0.priority())
}
}