avina_wire/budgeting/
budget_over_tree.rs1use std::collections::HashMap;
2
3use chrono::{DateTime, FixedOffset};
4use serde::{Deserialize, Serialize};
5use uuid::Uuid;
6
7#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Default)]
8pub struct BudgetOverTreeParams {
9 pub all: Option<bool>,
10 pub project: Option<u32>,
11 pub user: Option<u32>,
12 pub end: Option<DateTime<FixedOffset>>,
13}
14
15#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Default)]
16pub struct BudgetOverTreeServer {
17 pub total: f64,
18 pub flavors: HashMap<String, f64>,
19}
20
21#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Default)]
22pub struct BudgetOverTreeUser {
23 pub cost: f64,
24 pub budget_id: Option<u32>,
25 pub budget: Option<u64>,
26 pub over: bool,
27 pub servers: HashMap<Uuid, BudgetOverTreeServer>,
28 pub flavors: HashMap<String, f64>,
29}
30
31#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Default)]
32pub struct BudgetOverTreeProject {
33 pub cost: f64,
34 pub budget_id: Option<u32>,
35 pub budget: Option<u64>,
36 pub over: bool,
37 pub users: HashMap<String, BudgetOverTreeUser>,
38 #[serde(skip_serializing_if = "Option::is_none")]
40 pub flavors: Option<HashMap<String, f64>>,
41}
42
43#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Default)]
44pub struct BudgetOverTree {
45 #[serde(skip_serializing_if = "Option::is_none")]
46 pub cost: Option<f64>,
47 pub projects: HashMap<String, BudgetOverTreeProject>,
48 #[serde(skip_serializing_if = "Option::is_none")]
50 pub flavors: Option<HashMap<String, f64>>,
51}