nimbuspulse_client/types/
instance.rs1use serde::{Deserialize, Serialize};
2use uuid::Uuid;
3
4use super::billing::BillingType;
5use super::dcs_runtime::DcsRuntime;
6use super::dcs_settings::DcsSettings;
7use super::region::Region;
8
9#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
10#[serde(rename_all = "snake_case")]
11pub enum GameType {
12 Dcs,
13}
14
15#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
16pub struct Instance {
17 pub id: Uuid,
18 pub node_id: Uuid,
19 pub user_id: Uuid,
20 pub product_id: Uuid,
21 pub log_session_id: Option<Uuid>,
22 pub game_type: GameType,
23 pub billing_type: BillingType,
24 pub port: i32,
25 pub webgui_port: i32,
26 pub ftp_port: i32,
27 pub ftp_username: String,
28 pub ftp_password: String,
29 pub pid: Option<i32>,
30 pub status: InstanceStatus,
31 pub want_delete: bool,
32 pub rented_at: i64,
33 pub rented_until: Option<i64>,
34 pub active_mods: Vec<String>,
35 pub subscription_cancel_at_period_end: bool,
36 pub subscription_overdue: bool,
37 pub subscription_next_payment_attempt: Option<i64>,
38 pub subscription_next_payment_url: Option<String>,
39 pub created_at: String,
40 pub dcs_settings: Option<DcsSettings>,
41}
42
43#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
44pub struct InstanceNodeResource {
45 pub region: Region,
46 pub ip: String,
47 pub domain: String,
48}
49
50#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
51pub struct InstanceResource {
52 #[serde(flatten)]
53 pub instance: Instance,
54 #[serde(flatten)]
55 pub node: InstanceNodeResource,
56 pub runtime: Option<GameRuntime>,
57 pub permissions: Option<InstancePermissions>,
58}
59
60pub type InstancesResponse = Vec<InstanceResource>;
61
62#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
63#[serde(untagged)]
64pub enum GameRuntime {
65 Dcs(DcsRuntime),
66}
67
68#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
69pub struct InstancePermissions {
70 pub owner_user: UserResource,
71 pub permissions: Vec<Permission>,
72}
73
74#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
75pub struct UserResource {
76 pub id: Uuid,
77 pub name: String,
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
81pub enum Permission {
82 #[serde(rename = "instance:view")]
83 InstanceView,
84 #[serde(rename = "instance:actions")]
85 InstanceActions,
86 #[serde(rename = "instance:chat")]
87 InstanceChat,
88 #[serde(rename = "instance:players:manage")]
89 InstancePlayersManage,
90 #[serde(rename = "instance:missions")]
91 InstanceMissions,
92 #[serde(rename = "instance:settings")]
93 InstanceSettings,
94 #[serde(rename = "instance:infrastructure")]
95 InstanceInfrastructure,
96 #[serde(rename = "instance:mods")]
97 InstanceMods,
98 #[serde(rename = "instance:scheduled_tasks")]
99 InstanceScheduledTasks,
100 #[serde(rename = "instance:file:read")]
101 InstanceFileRead,
102 #[serde(rename = "instance:file:write")]
103 InstanceFileWrite,
104}
105
106#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
107pub enum InstanceStatus {
108 AwaitingContainer,
109 InstallingBaseGame {
110 progress: Option<u8>,
111 },
112 InstallingMods {
113 is_post_creation: bool,
114 },
115 UninstallingMods,
116 InstallingPost {
117 is_post_creation: bool,
118 },
119 ServerStarted,
120 ServerStopped {
121 was_error: bool,
122 reason: InstanceStoppedReason,
123 },
124 ServerExpired,
125 ServerDeleted,
126 WantServerStarted {
127 current_try: u32,
128 },
129 WantServerStopped {
130 error_passthrough: Option<(bool, InstanceStoppedReason)>,
131 },
132 WantUpdateServer {
133 was_stopped: bool,
134 },
135}
136
137#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
138pub enum InstanceStoppedReason {
139 StoppedNormally,
140 StoppedUnexpectedly,
141 MaxTriesReached,
142 ServerUpdating,
143 RebootRequestedThroughFile,
144 DcsSessionExpired,
145 DcsAuthFailed,
146 StoppedForRestart { scheduled: bool },
147}
148
149#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
150pub struct ApiError {
151 pub message: String,
152 pub code: String,
153}