rusty_cdk_core/cloudwatch/
builder.rs1use crate::cloudwatch::{LogGroup, LogGroupProperties, LogGroupRef};
2use crate::shared::Id;
3use crate::stack::{Resource, StackBuilder};
4use crate::wrappers::{LogGroupName, RetentionInDays};
5use serde_json::Value;
6
7pub enum LogGroupClass {
8 Standard,
9 InfrequentAccess,
10}
11
12impl From<LogGroupClass> for String {
13 fn from(value: LogGroupClass) -> Self {
14 match value {
15 LogGroupClass::Standard => "STANDARD".to_string(),
16 LogGroupClass::InfrequentAccess => "INFREQUENT_ACCESS".to_string(),
17 }
18 }
19}
20
21pub struct LogGroupBuilder {
40 id: Id,
41 log_group_name: Option<Value>,
42 log_group_class: Option<LogGroupClass>,
43 log_group_retention: Option<u16>,
44}
45
46impl LogGroupBuilder {
47 pub fn new(id: &str) -> Self {
52 Self {
53 id: Id(id.to_string()),
54 log_group_name: None,
55 log_group_class: None,
56 log_group_retention: None,
57 }
58 }
59
60 pub fn log_group_name_string(self, log_group_name: LogGroupName) -> Self {
61 Self {
62 log_group_name: Some(Value::String(log_group_name.0)),
63 ..self
64 }
65 }
66
67 pub fn log_group_name_value(self, log_group_name: Value) -> Self {
68 Self {
69 log_group_name: Some(log_group_name),
70 ..self
71 }
72 }
73
74 pub fn log_group_class(self, log_group_class: LogGroupClass) -> Self {
75 Self {
76 log_group_class: Some(log_group_class),
77 ..self
78 }
79 }
80
81 pub fn log_group_retention(self, log_group_retention_in_days: RetentionInDays) -> Self {
82 Self {
83 log_group_retention: Some(log_group_retention_in_days.0),
84 ..self
85 }
86 }
87
88 pub fn build(self, stack_builder: &mut StackBuilder) -> LogGroupRef {
89 let properties = LogGroupProperties {
90 log_group_name: self.log_group_name,
91 log_group_class: self.log_group_class.map(Into::into),
92 log_group_retention: self.log_group_retention,
93 };
94
95 let resource_id = Resource::generate_id("LogGroup");
96
97 stack_builder.add_resource(LogGroup {
98 id: self.id,
99 resource_id: resource_id.clone(),
100 r#type: "AWS::Logs::LogGroup".to_string(),
101 properties,
102 });
103
104 LogGroupRef::new(resource_id)
105 }
106}