lrzcc_wire/
pricing.rs

1use chrono::{DateTime, FixedOffset};
2use serde::{Deserialize, Serialize};
3use std::fmt::Display;
4use tabled::Tabled;
5
6#[derive(Clone, Debug, Deserialize, Serialize, Tabled, PartialEq)]
7pub struct FlavorPrice {
8    pub id: u32,
9    pub flavor: u32,
10    pub flavor_name: String,
11    pub user_class: u32,
12    pub unit_price: f64,
13    pub start_time: DateTime<FixedOffset>,
14}
15
16impl Display for FlavorPrice {
17    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
18        f.write_str(&format!(
19            "FlavorPrice(id={}, flavor={})",
20            self.id, self.flavor_name
21        ))
22    }
23}
24
25#[derive(Clone, Debug, Deserialize, Serialize, Tabled, PartialEq)]
26pub struct FlavorPriceInitialize {
27    pub new_flavor_price_count: u32,
28}
29
30#[derive(Clone, Debug, Serialize, Deserialize)]
31pub struct FlavorPriceCreateData {
32    pub flavor: u32,
33    // TODO use an enum for this
34    pub user_class: u32,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub price: Option<f64>,
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub start_time: Option<DateTime<FixedOffset>>,
39}
40
41impl FlavorPriceCreateData {
42    pub fn new(flavor: u32, user_class: u32) -> Self {
43        Self {
44            flavor,
45            user_class,
46            price: None,
47            start_time: None,
48        }
49    }
50}
51
52#[derive(Clone, Debug, Serialize, Deserialize)]
53pub struct FlavorPriceModifyData {
54    pub id: u32,
55
56    #[serde(skip_serializing_if = "Option::is_none")]
57    pub flavor: Option<u32>,
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub user_class: Option<u32>,
60    #[serde(skip_serializing_if = "Option::is_none")]
61    pub unit_price: Option<f64>,
62    #[serde(skip_serializing_if = "Option::is_none")]
63    pub start_time: Option<DateTime<FixedOffset>>,
64}
65
66impl FlavorPriceModifyData {
67    pub fn new(id: u32) -> Self {
68        Self {
69            id,
70            flavor: None,
71            user_class: None,
72            unit_price: None,
73            start_time: None,
74        }
75    }
76}