avina_wire/accounting/
server_state.rs1use 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 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 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}