lrzcc_wire/accounting/
server_state.rs

1use crate::common::display_option;
2use chrono::{DateTime, FixedOffset};
3use serde::{Deserialize, Serialize};
4use std::fmt::Display;
5use tabled::Tabled;
6
7#[derive(Clone, Debug, Deserialize, Serialize, Tabled, PartialEq)]
8pub struct ServerState {
9    pub id: u32,
10    pub begin: DateTime<FixedOffset>,
11    #[tabled(display_with = "display_option")]
12    pub end: Option<DateTime<FixedOffset>>,
13    pub instance_id: String, // UUIDv4
14    pub instance_name: String,
15    pub flavor: u32,
16    pub flavor_name: String,
17    pub status: String,
18    pub user: u32,
19    pub username: String,
20}
21
22impl Display for ServerState {
23    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
24        f.write_str(&format!("ServerState(id={})", self.id))
25    }
26}
27
28#[derive(Clone, Debug, Deserialize, Serialize, Tabled, PartialEq)]
29pub struct ServerStateImport {
30    pub new_state_count: u32,
31    pub end_state_count: u32,
32}
33
34#[derive(Clone, Debug, Serialize, Deserialize)]
35pub struct ServerStateListParams {
36    pub server: Option<String>,
37    pub user: Option<u32>,
38    pub project: Option<u32>,
39    pub all: Option<bool>,
40}
41
42#[derive(Clone, Debug, Serialize, Deserialize)]
43pub struct ServerStateCreateData {
44    pub begin: DateTime<FixedOffset>,
45    #[serde(skip_serializing_if = "Option::is_none")]
46    pub end: Option<DateTime<FixedOffset>>,
47    pub instance_id: String, // UUIDv4
48    pub instance_name: String,
49    pub flavor: u32,
50    // TODO we need an enum here
51    pub status: String,
52    pub user: u32,
53}
54
55impl ServerStateCreateData {
56    pub fn new(
57        begin: DateTime<FixedOffset>,
58        instance_id: String, // UUIDv4
59        instance_name: String,
60        flavor: u32,
61        status: String,
62        user: u32,
63    ) -> Self {
64        Self {
65            begin,
66            end: None,
67            instance_id,
68            instance_name,
69            flavor,
70            status,
71            user,
72        }
73    }
74}
75
76#[derive(Clone, Debug, Serialize, Deserialize)]
77pub struct ServerStateModifyData {
78    pub id: u32,
79
80    #[serde(skip_serializing_if = "Option::is_none")]
81    pub begin: Option<DateTime<FixedOffset>>,
82    #[serde(skip_serializing_if = "Option::is_none")]
83    pub end: Option<DateTime<FixedOffset>>,
84    #[serde(skip_serializing_if = "Option::is_none")]
85    pub instance_id: Option<String>, // UUIDv4
86    #[serde(skip_serializing_if = "Option::is_none")]
87    pub instance_name: Option<String>,
88    #[serde(skip_serializing_if = "Option::is_none")]
89    pub flavor: Option<u32>,
90    #[serde(skip_serializing_if = "Option::is_none")]
91    // TODO we need an enum here
92    pub status: Option<String>,
93    #[serde(skip_serializing_if = "Option::is_none")]
94    pub user: Option<u32>,
95}
96
97impl ServerStateModifyData {
98    pub fn new(id: u32) -> Self {
99        Self {
100            id,
101            begin: None,
102            end: None,
103            instance_id: None,
104            instance_name: None,
105            flavor: None,
106            status: None,
107            user: None,
108        }
109    }
110}