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