rdb_pagination_core/
order_method.rsuse std::{fmt::Debug, hash::Hash, num::ParseIntError, str::FromStr};
pub trait OrderMethodValue:
Debug
+ Default
+ Copy
+ Clone
+ Eq
+ PartialEq
+ Ord
+ PartialOrd
+ Hash
+ FromStr<Err = ParseIntError> {
fn zero() -> Self;
fn one() -> Self;
fn abs(&self) -> Self;
}
impl OrderMethodValue for i8 {
#[inline]
fn zero() -> Self {
0
}
#[inline]
fn one() -> Self {
1
}
#[inline]
fn abs(&self) -> Self {
i8::abs(*self)
}
}
impl OrderMethodValue for i16 {
#[inline]
fn zero() -> Self {
0
}
#[inline]
fn one() -> Self {
1
}
#[inline]
fn abs(&self) -> Self {
i16::abs(*self)
}
}
#[derive(Debug, Default, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
pub struct OrderMethod<T: OrderMethodValue = i8>(pub T);
impl<T: OrderMethodValue> From<T> for OrderMethod<T> {
#[inline]
fn from(value: T) -> Self {
Self(value)
}
}