fakecloud_secretsmanager/
state.rs1use 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>>;