1use std::fmt;
2
3use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Serialize, Deserialize, Clone)]
7pub enum ApiKeyLimit {
8 Limited(u32),
9 Unlimited,
10}
11
12impl fmt::Display for ApiKeyLimit {
13 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
14 match self {
15 ApiKeyLimit::Limited(limit) => write!(f, "{}", limit),
16 ApiKeyLimit::Unlimited => write!(f, "unlimited"),
17 }
18 }
19}
20
21#[derive(Debug, Serialize, Deserialize, Clone)]
22pub struct ApiKeyLimits {
23 pub max_reads_per_minute: ApiKeyLimit,
24 pub max_writes_per_minute: ApiKeyLimit,
25}
26
27#[derive(Debug, Serialize, Deserialize, Clone)]
28pub struct ApiKeyRestrictions {
29 pub allowed_domains: Vec<String>,
30}
31
32#[derive(Debug, Serialize, Deserialize, Clone)]
33pub enum ApiKeyStatus {
34 Active,
35 Inactive,
36 Deleted,
37}
38
39#[derive(Debug, Serialize, Deserialize, Clone)]
40pub struct ApiKey {
41 pub key: String,
42 pub limits: ApiKeyLimits,
43 pub restrictions: ApiKeyRestrictions,
44 pub status: ApiKeyStatus,
45 pub created_at: DateTime<Utc>,
46 pub updated_at: DateTime<Utc>,
47}