apikeys_rs/
types.rs

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}