reddit_rs/models/
award.rs1use std::collections::HashMap;
2
3use iri_string::types::IriAbsoluteString;
4use serde::{de::Unexpected, Deserialize, Serialize};
5
6use crate::models::{
7 fullname::FullName,
8 icon::{Icon, IconFormat},
9};
10
11#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
12pub struct Awarding {
13 giver_coin_reward: Option<u16>,
14 subreddit_id: Option<FullName>,
15 is_new: bool,
16 days_of_drip_extension: u32,
17 coin_price: u32,
18 id: String,
20 penny_donate: Option<u32>,
21 award_sub_type: AwardSubType,
22 coin_reward: u32,
23 icon_url: IriAbsoluteString,
24 days_of_premium: u32,
25 tiers_by_required_awardings: Option<TiersByRequiredAwardings>,
26 resized_icons: Vec<Icon>,
27 resized_static_icons: Vec<Icon>,
28 icon_width: u32,
29 static_icon_width: u32,
30 start_date: Option<()>,
31 is_enabled: bool,
32 awardings_required_to_grant_benefits: Option<u32>,
33 description: String,
34 end_date: Option<()>,
35 subreddit_coin_reward: u32,
36 count: u32,
37 static_icon_height: u32,
38 name: String,
39 icon_format: Option<IconFormat>,
40 icon_height: u32,
41 penny_price: Option<u32>,
42 award_type: AwardType,
43 static_icon_url: IriAbsoluteString,
44}
45
46#[derive(Debug, Clone, Serialize, PartialEq)]
47pub struct TiersByRequiredAwardings(HashMap<u32, RequiredAwardings>);
48
49impl<'de> Deserialize<'de> for TiersByRequiredAwardings {
50 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
51 where
52 D: serde::Deserializer<'de>,
53 {
54 use serde::de::Error;
55
56 let map = HashMap::<String, RequiredAwardings>::deserialize(deserializer)?;
57
58 Ok(Self(
59 map.into_iter()
60 .map(|(k, v)| match k.parse() {
61 Ok(i) => Ok((i, v)),
62 Err(_why) => Err(D::Error::invalid_value(
63 Unexpected::Str(&k),
64 &"a numeric string key",
65 )),
66 })
67 .collect::<Result<HashMap<u32, RequiredAwardings>, _>>()?,
68 ))
69 }
70}
71
72#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
73pub struct RequiredAwardings {
74 resized_icons: Vec<Icon>,
75 resized_static_icons: Vec<Icon>,
76 awardings_required: u32,
77 icon: Icon,
78 static_icon: Icon,
79}
80
81#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
82#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
83pub enum AwardSubType {
84 Global,
85 Premium,
86 Group,
87 Appreciation,
88 Community,
89}
90
91#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
92#[serde(rename_all = "snake_case")]
93pub enum AwardType {
94 Global,
95 Community,
96}
97
98#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
99#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
100pub enum TopAwardedType {
101 Active,
102 Inactive,
103}