fakecloud_core/
registry.rs1use crate::service::AwsService;
2use std::collections::HashMap;
3use std::sync::Arc;
4
5#[derive(Default)]
7pub struct ServiceRegistry {
8 services: HashMap<String, Arc<dyn AwsService>>,
9}
10
11impl ServiceRegistry {
12 pub fn new() -> Self {
13 Self::default()
14 }
15
16 pub fn register(&mut self, service: Arc<dyn AwsService>) {
17 self.services
18 .insert(service.service_name().to_string(), service);
19 }
20
21 pub fn get(&self, name: &str) -> Option<&Arc<dyn AwsService>> {
22 self.services.get(name)
23 }
24
25 pub fn service_names(&self) -> Vec<&str> {
26 self.services.keys().map(|s| s.as_str()).collect()
27 }
28
29 pub fn iam_enforcement_split(&self) -> (Vec<&str>, Vec<&str>) {
33 let mut enforced: Vec<&str> = Vec::new();
34 let mut skipped: Vec<&str> = Vec::new();
35 for (name, service) in &self.services {
36 if service.iam_enforceable() {
37 enforced.push(name.as_str());
38 } else {
39 skipped.push(name.as_str());
40 }
41 }
42 enforced.sort();
43 skipped.sort();
44 (enforced, skipped)
45 }
46}