rusty_cdk_core/cloudwatch/
builder.rs1use crate::cloudwatch::{LogGroup, LogGroupProperties, LogGroupRef, LogGroupType};
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 {
42 id: Id,
43 log_group_name: Option<Value>,
44 log_group_class: Option<LogGroupClass>,
45 log_group_retention: Option<u16>,
46}
47
48impl LogGroupBuilder {
49 pub fn new(id: &str) -> Self {
54 Self {
55 id: Id(id.to_string()),
56 log_group_name: None,
57 log_group_class: None,
58 log_group_retention: None,
59 }
60 }
61
62 pub fn log_group_name_string(self, log_group_name: LogGroupName) -> Self {
63 Self {
64 log_group_name: Some(Value::String(log_group_name.0)),
65 ..self
66 }
67 }
68
69 pub fn log_group_class(self, log_group_class: LogGroupClass) -> Self {
70 Self {
71 log_group_class: Some(log_group_class),
72 ..self
73 }
74 }
75
76 pub fn log_group_retention(self, log_group_retention_in_days: RetentionInDays) -> Self {
77 Self {
78 log_group_retention: Some(log_group_retention_in_days.0),
79 ..self
80 }
81 }
82
83 pub fn build(self, stack_builder: &mut StackBuilder) -> LogGroupRef {
84 let properties = LogGroupProperties {
85 log_group_name: self.log_group_name,
86 log_group_class: self.log_group_class.map(Into::into),
87 log_group_retention: self.log_group_retention,
88 };
89
90 let resource_id = Resource::generate_id("LogGroup");
91
92 stack_builder.add_resource(LogGroup {
93 id: self.id,
94 resource_id: resource_id.clone(),
95 r#type: LogGroupType::LogGroupType,
96 properties,
97 });
98
99 LogGroupRef::internal_new(resource_id)
100 }
101}