avina_wire/
pricing.rs

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