rdb_pagination_core/
order_method.rs1use std::{fmt::Debug, hash::Hash, num::ParseIntError, str::FromStr};
2
3pub trait OrderMethodValue:
5 Debug
6 + Default
7 + Copy
8 + Clone
9 + Eq
10 + PartialEq
11 + Ord
12 + PartialOrd
13 + Hash
14 + FromStr<Err = ParseIntError> {
15 fn zero() -> Self;
16
17 fn one() -> Self;
18
19 fn abs(&self) -> Self;
20}
21
22impl OrderMethodValue for i8 {
23 #[inline]
24 fn zero() -> Self {
25 0
26 }
27
28 #[inline]
29 fn one() -> Self {
30 1
31 }
32
33 #[inline]
34 fn abs(&self) -> Self {
35 i8::abs(*self)
36 }
37}
38
39impl OrderMethodValue for i16 {
40 #[inline]
41 fn zero() -> Self {
42 0
43 }
44
45 #[inline]
46 fn one() -> Self {
47 1
48 }
49
50 #[inline]
51 fn abs(&self) -> Self {
52 i16::abs(*self)
53 }
54}
55
56#[derive(Debug, Default, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
63pub struct OrderMethod<T: OrderMethodValue = i8>(pub T);
64
65impl<T: OrderMethodValue> From<T> for OrderMethod<T> {
66 #[inline]
67 fn from(value: T) -> Self {
68 Self(value)
69 }
70}