Skip to main content

nimbuspulse_client/types/
instance.rs

1use 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}