Skip to main content

edgequake_sdk/types/
auth.rs

1//! Authentication types.
2
3use serde::{Deserialize, Serialize};
4
5/// Login request.
6#[derive(Debug, Clone, Serialize)]
7pub struct LoginRequest {
8    pub username: String,
9    pub password: String,
10}
11
12/// Token response from login/refresh.
13#[derive(Debug, Clone, Deserialize)]
14pub struct TokenResponse {
15    pub access_token: String,
16    #[serde(default)]
17    pub refresh_token: Option<String>,
18    #[serde(default)]
19    pub token_type: Option<String>,
20    #[serde(default)]
21    pub expires_in: Option<u64>,
22}
23
24/// Refresh request.
25#[derive(Debug, Clone, Serialize)]
26pub struct RefreshRequest {
27    pub refresh_token: String,
28}
29
30/// User info.
31#[derive(Debug, Clone, Deserialize)]
32pub struct UserInfo {
33    pub id: String,
34    #[serde(default)]
35    pub username: Option<String>,
36    #[serde(default)]
37    pub email: Option<String>,
38    #[serde(default)]
39    pub role: Option<String>,
40}
41
42/// Create user request.
43#[derive(Debug, Clone, Serialize)]
44pub struct CreateUserRequest {
45    pub username: String,
46    pub email: String,
47    pub password: String,
48    #[serde(skip_serializing_if = "Option::is_none")]
49    pub role: Option<String>,
50}
51
52/// API key response.
53#[derive(Debug, Clone, Deserialize)]
54pub struct ApiKeyResponse {
55    pub id: String,
56    pub key: String,
57    #[serde(default)]
58    pub name: Option<String>,
59    #[serde(default)]
60    pub created_at: Option<String>,
61}
62
63/// API key info (without secret).
64#[derive(Debug, Clone, Deserialize)]
65pub struct ApiKeyInfo {
66    pub id: String,
67    #[serde(default)]
68    pub name: Option<String>,
69    #[serde(default)]
70    pub created_at: Option<String>,
71}
72
73/// Create tenant request.
74#[derive(Debug, Clone, Serialize)]
75pub struct CreateTenantRequest {
76    pub name: String,
77    #[serde(skip_serializing_if = "Option::is_none")]
78    pub slug: Option<String>,
79}
80
81/// Tenant info.
82#[derive(Debug, Clone, Deserialize)]
83pub struct TenantInfo {
84    pub id: String,
85    pub name: String,
86    #[serde(default)]
87    pub slug: Option<String>,
88    #[serde(default)]
89    pub plan: Option<String>,
90    #[serde(default)]
91    pub is_active: Option<bool>,
92}
93
94/// Tenant list response from GET /api/v1/tenants.
95#[derive(Debug, Clone, Deserialize)]
96pub struct TenantListResponse {
97    #[serde(default)]
98    pub items: Vec<TenantInfo>,
99}
100
101/// User list response from GET /api/v1/users.
102#[derive(Debug, Clone, Deserialize)]
103pub struct UserListResponse {
104    #[serde(default)]
105    pub users: Vec<UserInfo>,
106}
107
108/// API key list response from GET /api/v1/api-keys.
109#[derive(Debug, Clone, Deserialize)]
110pub struct ApiKeyListResponse {
111    #[serde(default)]
112    pub keys: Vec<ApiKeyInfo>,
113}