fakecloud_codeconnections/
state.rs1use std::collections::BTreeMap;
10use std::sync::Arc;
11
12use parking_lot::RwLock;
13use serde::{Deserialize, Serialize};
14use serde_json::Value;
15
16use fakecloud_core::multi_account::{AccountState, MultiAccountState};
17
18pub const CODECONNECTIONS_SNAPSHOT_SCHEMA_VERSION: u32 = 1;
19
20pub type TagMap = BTreeMap<String, String>;
22
23#[derive(Debug, Clone, Serialize, Deserialize)]
25pub struct ConnectionRecord {
26 pub connection_arn: String,
27 pub connection_name: String,
28 #[serde(default)]
31 pub provider_type: Option<String>,
32 pub owner_account_id: String,
33 pub connection_status: String,
36 #[serde(default)]
37 pub host_arn: Option<String>,
38 #[serde(default)]
39 pub tags: TagMap,
40}
41
42#[derive(Debug, Clone, Serialize, Deserialize)]
45pub struct HostRecord {
46 pub host_arn: String,
47 pub name: String,
48 pub provider_type: String,
49 pub provider_endpoint: String,
50 pub status: String,
53 #[serde(default)]
55 pub vpc_configuration: Option<Value>,
56 #[serde(default)]
57 pub tags: TagMap,
58}
59
60#[derive(Debug, Clone, Serialize, Deserialize)]
62pub struct RepositoryLinkRecord {
63 pub repository_link_id: String,
64 pub repository_link_arn: String,
65 pub connection_arn: String,
66 pub owner_id: String,
67 pub repository_name: String,
68 pub provider_type: String,
69 #[serde(default)]
70 pub encryption_key_arn: Option<String>,
71 #[serde(default)]
72 pub tags: TagMap,
73}
74
75#[derive(Debug, Clone, Serialize, Deserialize)]
78pub struct SyncConfigurationRecord {
79 pub branch: String,
80 #[serde(default)]
81 pub config_file: Option<String>,
82 pub owner_id: String,
83 pub provider_type: String,
84 pub repository_link_id: String,
85 pub repository_name: String,
86 pub resource_name: String,
87 pub role_arn: String,
88 pub sync_type: String,
89 #[serde(default)]
90 pub publish_deployment_status: Option<String>,
91 #[serde(default)]
92 pub trigger_resource_update_on: Option<String>,
93 #[serde(default)]
94 pub pull_request_comment: Option<String>,
95}
96
97#[derive(Debug, Clone, Default, Serialize, Deserialize)]
99pub struct CodeConnectionsState {
100 #[serde(default)]
102 pub connections: BTreeMap<String, ConnectionRecord>,
103 #[serde(default)]
105 pub hosts: BTreeMap<String, HostRecord>,
106 #[serde(default)]
108 pub repository_links: BTreeMap<String, RepositoryLinkRecord>,
109 #[serde(default)]
111 pub sync_configurations: BTreeMap<String, SyncConfigurationRecord>,
112}
113
114impl AccountState for CodeConnectionsState {
115 fn new_for_account(_account_id: &str, _region: &str, _endpoint: &str) -> Self {
116 Self::default()
117 }
118}
119
120pub type SharedCodeConnectionsState = Arc<RwLock<MultiAccountState<CodeConnectionsState>>>;
121
122#[derive(Debug, Serialize, Deserialize)]
123pub struct CodeConnectionsSnapshot {
124 pub schema_version: u32,
125 pub accounts: MultiAccountState<CodeConnectionsState>,
126}
127
128pub fn skey(sync_type: &str, resource_name: &str) -> String {
130 format!("{sync_type}\u{1}{resource_name}")
131}