avina_wire/accounting/
server_cost.rs

1use std::{collections::HashMap, fmt::Debug};
2
3use chrono::{DateTime, FixedOffset};
4use serde::{Deserialize, Serialize};
5#[cfg(feature = "tabled")]
6use tabled::Tabled;
7use uuid::Uuid;
8
9#[cfg_attr(feature = "tabled", derive(Tabled))]
10#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Default)]
11pub struct ServerCostSimple {
12    pub total: f64,
13}
14
15#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Default)]
16pub struct ServerCostServer {
17    pub total: f64,
18    pub flavors: HashMap<String, f64>,
19}
20
21#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Default)]
22pub struct ServerCostUser {
23    pub total: f64,
24    pub flavors: HashMap<String, f64>,
25    pub servers: HashMap<Uuid, ServerCostServer>,
26}
27
28#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Default)]
29pub struct ServerCostProject {
30    pub total: f64,
31    pub flavors: HashMap<String, f64>,
32    pub users: HashMap<String, ServerCostUser>,
33}
34
35#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Default)]
36pub struct ServerCostAll {
37    pub total: f64,
38    pub flavors: HashMap<String, f64>,
39    pub projects: HashMap<String, ServerCostProject>,
40}
41
42#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Default)]
43pub struct ServerCostParams {
44    pub begin: Option<DateTime<FixedOffset>>,
45    pub end: Option<DateTime<FixedOffset>>,
46    pub server: Option<Uuid>,
47    pub user: Option<u32>,
48    pub project: Option<u32>,
49    pub all: Option<bool>,
50    pub detail: Option<bool>,
51}