avina_wire/accounting/
server_state.rs

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