1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
4#[serde(rename_all = "lowercase")]
5pub enum VoteDirection {
6 Up,
7 Down,
8}
9
10impl VoteDirection {
11 pub fn as_str(&self) -> &'static str {
12 match self {
13 VoteDirection::Up => "up",
14 VoteDirection::Down => "down",
15 }
16 }
17
18 pub fn parse(s: &str) -> Option<Self> {
19 match s.to_lowercase().as_str() {
20 "up" => Some(VoteDirection::Up),
21 "down" => Some(VoteDirection::Down),
22 _ => None,
23 }
24 }
25}
26
27#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
28pub enum ColorScheme {
29 #[default]
30 Default,
31 Dark,
32 Light,
33 Solarized,
34}
35
36impl ColorScheme {
37 pub fn as_str(&self) -> &'static str {
38 match self {
39 ColorScheme::Default => "Default",
40 ColorScheme::Dark => "Dark",
41 ColorScheme::Light => "Light",
42 ColorScheme::Solarized => "Solarized",
43 }
44 }
45
46 pub fn parse(s: &str) -> Option<Self> {
47 match s {
48 "Default" => Some(ColorScheme::Default),
49 "Dark" => Some(ColorScheme::Dark),
50 "Light" => Some(ColorScheme::Light),
51 "Solarized" => Some(ColorScheme::Solarized),
52 _ => None,
53 }
54 }
55}
56
57#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)]
58pub enum SortOrder {
59 #[default]
60 Newest,
61 Popular,
62 Controversial,
63}
64
65impl SortOrder {
66 pub fn as_str(&self) -> &'static str {
67 match self {
68 SortOrder::Newest => "Newest",
69 SortOrder::Popular => "Popular",
70 SortOrder::Controversial => "Controversial",
71 }
72 }
73
74 pub fn parse(s: &str) -> Option<Self> {
75 match s {
76 "Newest" => Some(SortOrder::Newest),
77 "Popular" => Some(SortOrder::Popular),
78 "Controversial" => Some(SortOrder::Controversial),
79 _ => None,
80 }
81 }
82}