systemprompt_cli/commands/cloud/
types.rs1use chrono::{DateTime, Utc};
11use schemars::JsonSchema;
12use serde::{Deserialize, Serialize};
13
14pub use systemprompt_models::profile::ProfileInfo;
15
16#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
17pub struct CredentialsInfo {
18 pub authenticated: bool,
19 #[serde(skip_serializing_if = "Option::is_none")]
20 pub user_email: Option<String>,
21 pub token_expired: bool,
22}
23
24#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
25pub struct TenantStatusInfo {
26 pub id: String,
27 pub name: String,
28 pub status: String,
29 #[serde(skip_serializing_if = "Option::is_none")]
30 pub url: Option<String>,
31 #[serde(skip_serializing_if = "Option::is_none")]
32 pub message: Option<String>,
33 pub configured_in_profile: bool,
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
37pub struct CloudStatusOutput {
38 #[serde(skip_serializing_if = "Option::is_none")]
39 pub profile: Option<ProfileInfo>,
40 pub credentials: CredentialsInfo,
41 pub tenants: Vec<TenantStatusInfo>,
42}
43
44#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
45pub struct TenantPlanInfo {
46 pub name: String,
47 pub memory_mb: i32,
48 pub volume_gb: i32,
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
52pub struct LoginTenantInfo {
53 pub id: String,
54 pub name: String,
55 #[serde(skip_serializing_if = "Option::is_none")]
56 pub subscription_status: Option<String>,
57 #[serde(skip_serializing_if = "Option::is_none")]
58 pub plan: Option<TenantPlanInfo>,
59 #[serde(skip_serializing_if = "Option::is_none")]
60 pub region: Option<String>,
61 #[serde(skip_serializing_if = "Option::is_none")]
62 pub hostname: Option<String>,
63}
64
65#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
66pub struct LoginUserInfo {
67 pub id: String,
68 pub email: String,
69 #[serde(skip_serializing_if = "Option::is_none")]
70 pub name: Option<String>,
71}
72
73#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
74pub struct LoginCustomerInfo {
75 pub id: String,
76}
77
78#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
79pub struct LoginOutput {
80 pub user: LoginUserInfo,
81 #[serde(skip_serializing_if = "Option::is_none")]
82 pub customer: Option<LoginCustomerInfo>,
83 pub tenants: Vec<LoginTenantInfo>,
84 pub credentials_path: String,
85 pub tenants_path: String,
86}
87
88#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
89pub struct WhoamiOutput {
90 pub user_email: String,
91 pub api_url: String,
92 pub token_status: String,
93 pub authenticated_at: DateTime<Utc>,
94 pub local_profiles: usize,
95 pub cloud_tenants: usize,
96}
97
98#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
99pub struct LogoutOutput {
100 pub message: String,
101 #[serde(skip_serializing_if = "Option::is_none")]
102 pub credentials_path: Option<String>,
103}
104
105#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
106pub struct TenantSummary {
107 pub id: String,
108 pub name: String,
109 pub tenant_type: String,
110 pub has_database: bool,
111}
112
113#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
114pub struct TenantListOutput {
115 pub tenants: Vec<TenantSummary>,
116 pub total: usize,
117}
118
119#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
120pub struct TenantDetailOutput {
121 pub id: String,
122 pub name: String,
123 pub tenant_type: String,
124 #[serde(skip_serializing_if = "Option::is_none")]
125 pub app_id: Option<String>,
126 #[serde(skip_serializing_if = "Option::is_none")]
127 pub hostname: Option<String>,
128 #[serde(skip_serializing_if = "Option::is_none")]
129 pub region: Option<String>,
130 pub has_database: bool,
131}
132
133#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
134pub struct RotateCredentialsOutput {
135 #[serde(rename = "tenant_id")]
136 pub tenant: String,
137 pub status: String,
138 pub internal_database_url: String,
139 pub external_database_url: String,
140}
141
142#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
143pub struct ProfileSummary {
144 pub name: String,
145 pub has_secrets: bool,
146 pub is_active: bool,
147}
148
149#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
150pub struct ProfileListOutput {
151 pub profiles: Vec<ProfileSummary>,
152 pub total: usize,
153 #[serde(skip_serializing_if = "Option::is_none")]
154 pub active_profile: Option<String>,
155}
156
157#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
158pub struct SecretsOutput {
159 pub operation: String,
160 pub keys: Vec<String>,
161 #[serde(skip_serializing_if = "Option::is_none")]
162 pub rejected_keys: Option<Vec<String>>,
163}
164
165#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
166pub struct RestartOutput {
167 pub tenant_name: String,
168 pub status: String,
169}
170
171#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
172pub struct DockerfileOutput {
173 pub content: String,
174}
175
176#[derive(Debug, Clone, Serialize, Deserialize, JsonSchema)]
177pub struct CancelSubscriptionOutput {
178 #[serde(rename = "tenant_id")]
179 pub tenant: String,
180 pub tenant_name: String,
181 pub message: String,
182}