1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
use serde::ser::{Serialize, SerializeStruct, Serializer};

#[derive(Serialize)]
pub struct Pagination {
  pub max: Option<i32>,
  pub offset: Option<i32>,
}

pub enum Sort<K: Serialize> {
  Asc(K),
  Desc(K),
}

impl<K: Serialize> Serialize for Sort<K> {
  fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
  where
    S: Serializer,
  {
    let mut state = serializer.serialize_struct("Sort", 2)?;
    match *self {
      Sort::Asc(ref k) => {
        state.serialize_field("sort", k)?;
        state.serialize_field("order", "asc")?;
      }
      Sort::Desc(ref k) => {
        state.serialize_field("sort", k)?;
        state.serialize_field("order", "desc")?;
      }
    }
    state.end()
  }
}