Skip to main content

fakecloud_secretsmanager/
state.rs

1use chrono::{DateTime, Utc};
2use parking_lot::RwLock;
3use std::collections::HashMap;
4use std::sync::Arc;
5
6#[derive(Debug, Clone)]
7pub struct Secret {
8    pub name: String,
9    pub arn: String,
10    pub description: Option<String>,
11    pub kms_key_id: Option<String>,
12    pub versions: HashMap<String, SecretVersion>,
13    pub current_version_id: Option<String>,
14    pub tags: Vec<(String, String)>,
15    pub tags_ever_set: bool,
16    pub deleted: bool,
17    pub deletion_date: Option<DateTime<Utc>>,
18    pub created_at: DateTime<Utc>,
19    pub last_changed_at: DateTime<Utc>,
20    pub last_accessed_at: Option<DateTime<Utc>>,
21    pub rotation_enabled: Option<bool>,
22    pub rotation_lambda_arn: Option<String>,
23    pub rotation_rules: Option<RotationRules>,
24    pub last_rotated_at: Option<DateTime<Utc>>,
25    pub resource_policy: Option<String>,
26}
27
28#[derive(Debug, Clone)]
29pub struct RotationRules {
30    pub automatically_after_days: Option<i64>,
31}
32
33#[derive(Debug, Clone)]
34pub struct SecretVersion {
35    pub version_id: String,
36    pub secret_string: Option<String>,
37    pub secret_binary: Option<Vec<u8>>,
38    pub stages: Vec<String>,
39    pub created_at: DateTime<Utc>,
40}
41
42pub struct SecretsManagerState {
43    pub account_id: String,
44    pub region: String,
45    pub secrets: HashMap<String, Secret>,
46}
47
48impl SecretsManagerState {
49    pub fn new(account_id: &str, region: &str) -> Self {
50        Self {
51            account_id: account_id.to_string(),
52            region: region.to_string(),
53            secrets: HashMap::new(),
54        }
55    }
56
57    pub fn reset(&mut self) {
58        self.secrets.clear();
59    }
60}
61
62pub type SharedSecretsManagerState = Arc<RwLock<SecretsManagerState>>;