Reland "[source_generator] Output project-wide metric dimension enums"

This is a reland of 331d505c8f877e9a25fa3ccd325dd08948ae3902

Original change's description:
> [source_generator] Output project-wide metric dimension enums
>
> To avoid name collisions this only happens when:
>
> 1. All identical event code enums have the same dimension name
> 2. No non-identical event code enums have the same dimension name
>
> The new enum is named '<project name>MetricDimension<dimension name>'
>
> Change-Id: Iae9eaaedc41bf1032a893c4db0cd2a092ef69fcd

Change-Id: I4bca3f8b55a312b1ca511c3f3bffade3d31f2099
diff --git a/src/bin/config_parser/src/source_generator/source_generator_test_files/golden.cb.go b/src/bin/config_parser/src/source_generator/source_generator_test_files/golden.cb.go
index 7aa0f7c..46af5f2 100644
--- a/src/bin/config_parser/src/source_generator/source_generator_test_files/golden.cb.go
+++ b/src/bin/config_parser/src/source_generator/source_generator_test_files/golden.cb.go
@@ -45,50 +45,58 @@
 // Alias for event groups (Metric Dimension The First Group) which has the same event codes
 type EventGroupsMetricDimensionTheFirstGroup = TheOtherMetricNameMetricDimension0
 
-// Enum for event groups (Metric Dimension A second group)
-type EventGroupsMetricDimensionASecondGroup uint32
+// Enum for project (Metric Dimension A second group)
+type ProjectMetricDimensionASecondGroup uint32
 const (
-_ EventGroupsMetricDimensionASecondGroup = iota
+_ ProjectMetricDimensionASecondGroup = iota
   This = 1
   Is = 2
   Another = 3
   Test = 4
 )
+// Alias for event groups (Metric Dimension A second group) which has the same event codes
+type EventGroupsMetricDimensionASecondGroup = ProjectMetricDimensionASecondGroup
 
-// Enum for event groups (Metric Dimension 2)
-type EventGroupsMetricDimension2 uint32
+// Enum for project (Metric Dimension 2)
+type ProjectMetricDimension2 uint32
 const (
-_ EventGroupsMetricDimension2 = iota
+_ ProjectMetricDimension2 = iota
   ThisMetric = 0
   HasNo = 2
   Name = 4
 )
+// Alias for event groups (Metric Dimension 2) which has the same event codes
+type EventGroupsMetricDimension2 = ProjectMetricDimension2
 
-// Enum for metric (Metric Dimension First)
-type MetricMetricDimensionFirst uint32
+// Enum for project (Metric Dimension First)
+type ProjectMetricDimensionFirst uint32
 const (
-_ MetricMetricDimensionFirst = iota
+_ ProjectMetricDimensionFirst = iota
   A = 1
   Set = 2
   OfEvent = 3
   Codes = 4
 )
+// Alias for metric (Metric Dimension First) which has the same event codes
+type MetricMetricDimensionFirst = ProjectMetricDimensionFirst
 
 // Alias for second metric (Metric Dimension First) which has the same event codes
-type SecondMetricMetricDimensionFirst = MetricMetricDimensionFirst
+type SecondMetricMetricDimensionFirst = ProjectMetricDimensionFirst
 
-// Enum for metric (Metric Dimension Second)
-type MetricMetricDimensionSecond uint32
+// Enum for project (Metric Dimension Second)
+type ProjectMetricDimensionSecond uint32
 const (
-_ MetricMetricDimensionSecond = iota
+_ ProjectMetricDimensionSecond = iota
   Some = 0
   More = 4
   Event = 8
   Codes = 16
 )
+// Alias for metric (Metric Dimension Second) which has the same event codes
+type MetricMetricDimensionSecond = ProjectMetricDimensionSecond
 
 // Alias for second metric (Metric Dimension Second) which has the same event codes
-type SecondMetricMetricDimensionSecond = MetricMetricDimensionSecond
+type SecondMetricMetricDimensionSecond = ProjectMetricDimensionSecond
 
 // The base64 encoding of the bytes of a serialized CobaltRegistry proto message.
 const Config string = "KooHCghjdXN0b21lchAKGvsGCgdwcm9qZWN0EAUaVQoPdGhlX21ldHJpY19uYW1lEAoYBSBkYhEKCnRoZV9yZXBvcnQQChiPTmIWChB0aGVfb3RoZXJfcmVwb3J0EBQYA3IIY3VzdG9tZXJ6B3Byb2plY3QafwoVdGhlX290aGVyX21ldHJpY19uYW1lEAoYBSDIASgBUAFiEAoKdGhlX3JlcG9ydBAKGAdyCGN1c3RvbWVyegdwcm9qZWN0ggE1EgsIABIHQW5FdmVudBIQCAESDEFub3RoZXJFdmVudBIRCAISDUEgdGhpcmQgZXZlbnQYyAEa+gEKDGV2ZW50IGdyb3VwcxAKGAUgrAIoAVABYhAKCnRoZV9yZXBvcnQQHhgHcghjdXN0b21lcnoHcHJvamVjdIIBRQoPVGhlIEZpcnN0IEdyb3VwEgsIABIHQW5FdmVudBIQCAESDEFub3RoZXJFdmVudBIRCAISDUEgdGhpcmQgZXZlbnQYAoIBOQoOQSBzZWNvbmQgZ3JvdXASCAgBEgRUaGlzEgYIAhICSXMSCwgDEgdhbm90aGVyEggIBBIEVGVzdIIBNRIOCAASClRoaXNNZXRyaWMSCQgCEgVIYXNObxIICAQSBE5hbWUqDgoFSGFzTm8SBUFsaWFzGjMKDmxpbmVhciBidWNrZXRzEAoYBSCQA0IHEgUQjAEYBXIIY3VzdG9tZXJ6B3Byb2plY3QaRQoTZXhwb25lbnRpYWwgYnVja2V0cxAKGAUg9ANiFAoGcmVwb3J0EChSCAoGEAMYAiACcghjdXN0b21lcnoHcHJvamVjdBqJAQoGbWV0cmljEAoYBSDYBHIIY3VzdG9tZXJ6B3Byb2plY3SCAS8KBUZpcnN0EgUIARIBQRIHCAISA1NldBILCAMSB09mRXZlbnQSCQgEEgVDb2Rlc4IBMgoGU2Vjb25kEggIABIEU29tZRIICAQSBE1vcmUSCQgIEgVFdmVudBIJCBASBUNvZGVzGpABCg1zZWNvbmQgbWV0cmljEAoYBSDZBHIIY3VzdG9tZXJ6B3Byb2plY3SCAS8KBUZpcnN0EgUIARIBQRIHCAISA1NldBILCAMSB09mRXZlbnQSCQgEEgVDb2Rlc4IBMgoGU2Vjb25kEggIABIEU29tZRIICAQSBE1vcmUSCQgIEgVFdmVudBIJCBASBUNvZGVz";
diff --git a/src/bin/config_parser/src/source_generator/source_generator_test_files/golden.cb.h b/src/bin/config_parser/src/source_generator/source_generator_test_files/golden.cb.h
index f7584e1..70d7880 100644
--- a/src/bin/config_parser/src/source_generator/source_generator_test_files/golden.cb.h
+++ b/src/bin/config_parser/src/source_generator/source_generator_test_files/golden.cb.h
@@ -56,75 +56,83 @@
 const EventGroupsMetricDimensionTheFirstGroup EventGroupsMetricDimensionTheFirstGroup_AnotherEvent = EventGroupsMetricDimensionTheFirstGroup::AnotherEvent;
 const EventGroupsMetricDimensionTheFirstGroup EventGroupsMetricDimensionTheFirstGroup_AThirdEvent = EventGroupsMetricDimensionTheFirstGroup::AThirdEvent;
 
-// Enum for event groups (Metric Dimension A second group)
-namespace __event_groups_metric_dimension_a_second_group_internal_scope_do_not_use__ {
+// Enum for project (Metric Dimension A second group)
+namespace __project_metric_dimension_a_second_group_internal_scope_do_not_use__ {
 enum Enum {
   This = 1,
   Is = 2,
   Another = 3,
   Test = 4,
 };
-}  // __event_groups_metric_dimension_a_second_group_internal_scope_do_not_use__
-using EventGroupsMetricDimensionASecondGroup = __event_groups_metric_dimension_a_second_group_internal_scope_do_not_use__::Enum;
+}  // __project_metric_dimension_a_second_group_internal_scope_do_not_use__
+using ProjectMetricDimensionASecondGroup = __project_metric_dimension_a_second_group_internal_scope_do_not_use__::Enum;
+// Alias for event groups (Metric Dimension A second group) which has the same event codes
+using EventGroupsMetricDimensionASecondGroup = ProjectMetricDimensionASecondGroup;
 const EventGroupsMetricDimensionASecondGroup EventGroupsMetricDimensionASecondGroup_This = EventGroupsMetricDimensionASecondGroup::This;
 const EventGroupsMetricDimensionASecondGroup EventGroupsMetricDimensionASecondGroup_Is = EventGroupsMetricDimensionASecondGroup::Is;
 const EventGroupsMetricDimensionASecondGroup EventGroupsMetricDimensionASecondGroup_Another = EventGroupsMetricDimensionASecondGroup::Another;
 const EventGroupsMetricDimensionASecondGroup EventGroupsMetricDimensionASecondGroup_Test = EventGroupsMetricDimensionASecondGroup::Test;
 
-// Enum for event groups (Metric Dimension 2)
-namespace __event_groups_metric_dimension_2_internal_scope_do_not_use__ {
+// Enum for project (Metric Dimension 2)
+namespace __project_metric_dimension_2_internal_scope_do_not_use__ {
 enum Enum {
   ThisMetric = 0,
   HasNo = 2,
   Name = 4,
   Alias = HasNo,
 };
-}  // __event_groups_metric_dimension_2_internal_scope_do_not_use__
-using EventGroupsMetricDimension2 = __event_groups_metric_dimension_2_internal_scope_do_not_use__::Enum;
+}  // __project_metric_dimension_2_internal_scope_do_not_use__
+using ProjectMetricDimension2 = __project_metric_dimension_2_internal_scope_do_not_use__::Enum;
+// Alias for event groups (Metric Dimension 2) which has the same event codes
+using EventGroupsMetricDimension2 = ProjectMetricDimension2;
 const EventGroupsMetricDimension2 EventGroupsMetricDimension2_ThisMetric = EventGroupsMetricDimension2::ThisMetric;
 const EventGroupsMetricDimension2 EventGroupsMetricDimension2_HasNo = EventGroupsMetricDimension2::HasNo;
 const EventGroupsMetricDimension2 EventGroupsMetricDimension2_Name = EventGroupsMetricDimension2::Name;
 const EventGroupsMetricDimension2 EventGroupsMetricDimension2_Alias = EventGroupsMetricDimension2::Alias;
 
-// Enum for metric (Metric Dimension First)
-namespace __metric_metric_dimension_first_internal_scope_do_not_use__ {
+// Enum for project (Metric Dimension First)
+namespace __project_metric_dimension_first_internal_scope_do_not_use__ {
 enum Enum {
   A = 1,
   Set = 2,
   OfEvent = 3,
   Codes = 4,
 };
-}  // __metric_metric_dimension_first_internal_scope_do_not_use__
-using MetricMetricDimensionFirst = __metric_metric_dimension_first_internal_scope_do_not_use__::Enum;
+}  // __project_metric_dimension_first_internal_scope_do_not_use__
+using ProjectMetricDimensionFirst = __project_metric_dimension_first_internal_scope_do_not_use__::Enum;
+// Alias for metric (Metric Dimension First) which has the same event codes
+using MetricMetricDimensionFirst = ProjectMetricDimensionFirst;
 const MetricMetricDimensionFirst MetricMetricDimensionFirst_A = MetricMetricDimensionFirst::A;
 const MetricMetricDimensionFirst MetricMetricDimensionFirst_Set = MetricMetricDimensionFirst::Set;
 const MetricMetricDimensionFirst MetricMetricDimensionFirst_OfEvent = MetricMetricDimensionFirst::OfEvent;
 const MetricMetricDimensionFirst MetricMetricDimensionFirst_Codes = MetricMetricDimensionFirst::Codes;
 
 // Alias for second metric (Metric Dimension First) which has the same event codes
-using SecondMetricMetricDimensionFirst = MetricMetricDimensionFirst;
+using SecondMetricMetricDimensionFirst = ProjectMetricDimensionFirst;
 const SecondMetricMetricDimensionFirst SecondMetricMetricDimensionFirst_A = SecondMetricMetricDimensionFirst::A;
 const SecondMetricMetricDimensionFirst SecondMetricMetricDimensionFirst_Set = SecondMetricMetricDimensionFirst::Set;
 const SecondMetricMetricDimensionFirst SecondMetricMetricDimensionFirst_OfEvent = SecondMetricMetricDimensionFirst::OfEvent;
 const SecondMetricMetricDimensionFirst SecondMetricMetricDimensionFirst_Codes = SecondMetricMetricDimensionFirst::Codes;
 
-// Enum for metric (Metric Dimension Second)
-namespace __metric_metric_dimension_second_internal_scope_do_not_use__ {
+// Enum for project (Metric Dimension Second)
+namespace __project_metric_dimension_second_internal_scope_do_not_use__ {
 enum Enum {
   Some = 0,
   More = 4,
   Event = 8,
   Codes = 16,
 };
-}  // __metric_metric_dimension_second_internal_scope_do_not_use__
-using MetricMetricDimensionSecond = __metric_metric_dimension_second_internal_scope_do_not_use__::Enum;
+}  // __project_metric_dimension_second_internal_scope_do_not_use__
+using ProjectMetricDimensionSecond = __project_metric_dimension_second_internal_scope_do_not_use__::Enum;
+// Alias for metric (Metric Dimension Second) which has the same event codes
+using MetricMetricDimensionSecond = ProjectMetricDimensionSecond;
 const MetricMetricDimensionSecond MetricMetricDimensionSecond_Some = MetricMetricDimensionSecond::Some;
 const MetricMetricDimensionSecond MetricMetricDimensionSecond_More = MetricMetricDimensionSecond::More;
 const MetricMetricDimensionSecond MetricMetricDimensionSecond_Event = MetricMetricDimensionSecond::Event;
 const MetricMetricDimensionSecond MetricMetricDimensionSecond_Codes = MetricMetricDimensionSecond::Codes;
 
 // Alias for second metric (Metric Dimension Second) which has the same event codes
-using SecondMetricMetricDimensionSecond = MetricMetricDimensionSecond;
+using SecondMetricMetricDimensionSecond = ProjectMetricDimensionSecond;
 const SecondMetricMetricDimensionSecond SecondMetricMetricDimensionSecond_Some = SecondMetricMetricDimensionSecond::Some;
 const SecondMetricMetricDimensionSecond SecondMetricMetricDimensionSecond_More = SecondMetricMetricDimensionSecond::More;
 const SecondMetricMetricDimensionSecond SecondMetricMetricDimensionSecond_Event = SecondMetricMetricDimensionSecond::Event;
diff --git a/src/bin/config_parser/src/source_generator/source_generator_test_files/golden.cb.rs b/src/bin/config_parser/src/source_generator/source_generator_test_files/golden.cb.rs
index ba779d1..e51e740 100644
--- a/src/bin/config_parser/src/source_generator/source_generator_test_files/golden.cb.rs
+++ b/src/bin/config_parser/src/source_generator/source_generator_test_files/golden.cb.rs
@@ -43,50 +43,58 @@
 // Alias for event groups (Metric Dimension The First Group) which has the same event codes
 pub use TheOtherMetricNameMetricDimension0 as EventGroupsMetricDimensionTheFirstGroup;
 
-// Enum for event groups (Metric Dimension A second group)
+// Enum for project (Metric Dimension A second group)
 #[derive(Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Debug, Hash)]
-pub enum EventGroupsMetricDimensionASecondGroup {
+pub enum ProjectMetricDimensionASecondGroup {
   This = 1,
   Is = 2,
   Another = 3,
   Test = 4,
 }
+// Alias for event groups (Metric Dimension A second group) which has the same event codes
+pub use ProjectMetricDimensionASecondGroup as EventGroupsMetricDimensionASecondGroup;
 
-// Enum for event groups (Metric Dimension 2)
+// Enum for project (Metric Dimension 2)
 #[derive(Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Debug, Hash)]
-pub enum EventGroupsMetricDimension2 {
+pub enum ProjectMetricDimension2 {
   ThisMetric = 0,
   HasNo = 2,
   Name = 4,
 }
-impl EventGroupsMetricDimension2 {
+impl ProjectMetricDimension2 {
   #[allow(non_upper_case_globals)]
-  pub const Alias: EventGroupsMetricDimension2 = EventGroupsMetricDimension2::HasNo;
+  pub const Alias: ProjectMetricDimension2 = ProjectMetricDimension2::HasNo;
 }
+// Alias for event groups (Metric Dimension 2) which has the same event codes
+pub use ProjectMetricDimension2 as EventGroupsMetricDimension2;
 
-// Enum for metric (Metric Dimension First)
+// Enum for project (Metric Dimension First)
 #[derive(Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Debug, Hash)]
-pub enum MetricMetricDimensionFirst {
+pub enum ProjectMetricDimensionFirst {
   A = 1,
   Set = 2,
   OfEvent = 3,
   Codes = 4,
 }
+// Alias for metric (Metric Dimension First) which has the same event codes
+pub use ProjectMetricDimensionFirst as MetricMetricDimensionFirst;
 
 // Alias for second metric (Metric Dimension First) which has the same event codes
-pub use MetricMetricDimensionFirst as SecondMetricMetricDimensionFirst;
+pub use ProjectMetricDimensionFirst as SecondMetricMetricDimensionFirst;
 
-// Enum for metric (Metric Dimension Second)
+// Enum for project (Metric Dimension Second)
 #[derive(Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Debug, Hash)]
-pub enum MetricMetricDimensionSecond {
+pub enum ProjectMetricDimensionSecond {
   Some = 0,
   More = 4,
   Event = 8,
   Codes = 16,
 }
+// Alias for metric (Metric Dimension Second) which has the same event codes
+pub use ProjectMetricDimensionSecond as MetricMetricDimensionSecond;
 
 // Alias for second metric (Metric Dimension Second) which has the same event codes
-pub use MetricMetricDimensionSecond as SecondMetricMetricDimensionSecond;
+pub use ProjectMetricDimensionSecond as SecondMetricMetricDimensionSecond;
 
 // The base64 encoding of the bytes of a serialized CobaltRegistry proto message.
 pub const CONFIG: &str = "KooHCghjdXN0b21lchAKGvsGCgdwcm9qZWN0EAUaVQoPdGhlX21ldHJpY19uYW1lEAoYBSBkYhEKCnRoZV9yZXBvcnQQChiPTmIWChB0aGVfb3RoZXJfcmVwb3J0EBQYA3IIY3VzdG9tZXJ6B3Byb2plY3QafwoVdGhlX290aGVyX21ldHJpY19uYW1lEAoYBSDIASgBUAFiEAoKdGhlX3JlcG9ydBAKGAdyCGN1c3RvbWVyegdwcm9qZWN0ggE1EgsIABIHQW5FdmVudBIQCAESDEFub3RoZXJFdmVudBIRCAISDUEgdGhpcmQgZXZlbnQYyAEa+gEKDGV2ZW50IGdyb3VwcxAKGAUgrAIoAVABYhAKCnRoZV9yZXBvcnQQHhgHcghjdXN0b21lcnoHcHJvamVjdIIBRQoPVGhlIEZpcnN0IEdyb3VwEgsIABIHQW5FdmVudBIQCAESDEFub3RoZXJFdmVudBIRCAISDUEgdGhpcmQgZXZlbnQYAoIBOQoOQSBzZWNvbmQgZ3JvdXASCAgBEgRUaGlzEgYIAhICSXMSCwgDEgdhbm90aGVyEggIBBIEVGVzdIIBNRIOCAASClRoaXNNZXRyaWMSCQgCEgVIYXNObxIICAQSBE5hbWUqDgoFSGFzTm8SBUFsaWFzGjMKDmxpbmVhciBidWNrZXRzEAoYBSCQA0IHEgUQjAEYBXIIY3VzdG9tZXJ6B3Byb2plY3QaRQoTZXhwb25lbnRpYWwgYnVja2V0cxAKGAUg9ANiFAoGcmVwb3J0EChSCAoGEAMYAiACcghjdXN0b21lcnoHcHJvamVjdBqJAQoGbWV0cmljEAoYBSDYBHIIY3VzdG9tZXJ6B3Byb2plY3SCAS8KBUZpcnN0EgUIARIBQRIHCAISA1NldBILCAMSB09mRXZlbnQSCQgEEgVDb2Rlc4IBMgoGU2Vjb25kEggIABIEU29tZRIICAQSBE1vcmUSCQgIEgVFdmVudBIJCBASBUNvZGVzGpABCg1zZWNvbmQgbWV0cmljEAoYBSDZBHIIY3VzdG9tZXJ6B3Byb2plY3SCAS8KBUZpcnN0EgUIARIBQRIHCAISA1NldBILCAMSB09mRXZlbnQSCQgEEgVDb2Rlc4IBMgoGU2Vjb25kEggIABIEU29tZRIICAQSBE1vcmUSCQgIEgVFdmVudBIJCBASBUNvZGVz";
diff --git a/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_filtered.cb.go b/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_filtered.cb.go
index 0bb936a..27918d9 100644
--- a/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_filtered.cb.go
+++ b/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_filtered.cb.go
@@ -45,50 +45,58 @@
 // Alias for event groups (Metric Dimension The First Group) which has the same event codes
 type EventGroupsMetricDimensionTheFirstGroup = TheOtherMetricNameMetricDimension0
 
-// Enum for event groups (Metric Dimension A second group)
-type EventGroupsMetricDimensionASecondGroup uint32
+// Enum for project (Metric Dimension A second group)
+type ProjectMetricDimensionASecondGroup uint32
 const (
-_ EventGroupsMetricDimensionASecondGroup = iota
+_ ProjectMetricDimensionASecondGroup = iota
   This = 1
   Is = 2
   Another = 3
   Test = 4
 )
+// Alias for event groups (Metric Dimension A second group) which has the same event codes
+type EventGroupsMetricDimensionASecondGroup = ProjectMetricDimensionASecondGroup
 
-// Enum for event groups (Metric Dimension 2)
-type EventGroupsMetricDimension2 uint32
+// Enum for project (Metric Dimension 2)
+type ProjectMetricDimension2 uint32
 const (
-_ EventGroupsMetricDimension2 = iota
+_ ProjectMetricDimension2 = iota
   ThisMetric = 0
   HasNo = 2
   Name = 4
 )
+// Alias for event groups (Metric Dimension 2) which has the same event codes
+type EventGroupsMetricDimension2 = ProjectMetricDimension2
 
-// Enum for metric (Metric Dimension First)
-type MetricMetricDimensionFirst uint32
+// Enum for project (Metric Dimension First)
+type ProjectMetricDimensionFirst uint32
 const (
-_ MetricMetricDimensionFirst = iota
+_ ProjectMetricDimensionFirst = iota
   A = 1
   Set = 2
   OfEvent = 3
   Codes = 4
 )
+// Alias for metric (Metric Dimension First) which has the same event codes
+type MetricMetricDimensionFirst = ProjectMetricDimensionFirst
 
 // Alias for second metric (Metric Dimension First) which has the same event codes
-type SecondMetricMetricDimensionFirst = MetricMetricDimensionFirst
+type SecondMetricMetricDimensionFirst = ProjectMetricDimensionFirst
 
-// Enum for metric (Metric Dimension Second)
-type MetricMetricDimensionSecond uint32
+// Enum for project (Metric Dimension Second)
+type ProjectMetricDimensionSecond uint32
 const (
-_ MetricMetricDimensionSecond = iota
+_ ProjectMetricDimensionSecond = iota
   Some = 0
   More = 4
   Event = 8
   Codes = 16
 )
+// Alias for metric (Metric Dimension Second) which has the same event codes
+type MetricMetricDimensionSecond = ProjectMetricDimensionSecond
 
 // Alias for second metric (Metric Dimension Second) which has the same event codes
-type SecondMetricMetricDimensionSecond = MetricMetricDimensionSecond
+type SecondMetricMetricDimensionSecond = ProjectMetricDimensionSecond
 
 // The base64 encoding of the bytes of a serialized CobaltRegistry proto message.
 const Config string = "KoMGCghjdXN0b21lchAKGvQFCgdwcm9qZWN0EAUaQgoPdGhlX21ldHJpY19uYW1lEAoYBSBkYhEKCnRoZV9yZXBvcnQQChiPTmIWChB0aGVfb3RoZXJfcmVwb3J0EBQYAxpsChV0aGVfb3RoZXJfbWV0cmljX25hbWUQChgFIMgBKAFQAWIQCgp0aGVfcmVwb3J0EAoYB4IBNRILCAASB0FuRXZlbnQSEAgBEgxBbm90aGVyRXZlbnQSEQgCEg1BIHRoaXJkIGV2ZW50GMgBGucBCgxldmVudCBncm91cHMQChgFIKwCKAFQAWIQCgp0aGVfcmVwb3J0EB4YB4IBRQoPVGhlIEZpcnN0IEdyb3VwEgsIABIHQW5FdmVudBIQCAESDEFub3RoZXJFdmVudBIRCAISDUEgdGhpcmQgZXZlbnQYAoIBOQoOQSBzZWNvbmQgZ3JvdXASCAgBEgRUaGlzEgYIAhICSXMSCwgDEgdhbm90aGVyEggIBBIEVGVzdIIBNRIOCAASClRoaXNNZXRyaWMSCQgCEgVIYXNObxIICAQSBE5hbWUqDgoFSGFzTm8SBUFsaWFzGiAKDmxpbmVhciBidWNrZXRzEAoYBSCQA0IHEgUQjAEYBRoyChNleHBvbmVudGlhbCBidWNrZXRzEAoYBSD0A2IUCgZyZXBvcnQQKFIICgYQAxgCIAIadgoGbWV0cmljEAoYBSDYBIIBLwoFRmlyc3QSBQgBEgFBEgcIAhIDU2V0EgsIAxIHT2ZFdmVudBIJCAQSBUNvZGVzggEyCgZTZWNvbmQSCAgAEgRTb21lEggIBBIETW9yZRIJCAgSBUV2ZW50EgkIEBIFQ29kZXMafQoNc2Vjb25kIG1ldHJpYxAKGAUg2QSCAS8KBUZpcnN0EgUIARIBQRIHCAISA1NldBILCAMSB09mRXZlbnQSCQgEEgVDb2Rlc4IBMgoGU2Vjb25kEggIABIEU29tZRIICAQSBE1vcmUSCQgIEgVFdmVudBIJCBASBUNvZGVz";
diff --git a/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_filtered.cb.h b/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_filtered.cb.h
index 71d99ab..b770db4 100644
--- a/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_filtered.cb.h
+++ b/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_filtered.cb.h
@@ -56,75 +56,83 @@
 const EventGroupsMetricDimensionTheFirstGroup EventGroupsMetricDimensionTheFirstGroup_AnotherEvent = EventGroupsMetricDimensionTheFirstGroup::AnotherEvent;
 const EventGroupsMetricDimensionTheFirstGroup EventGroupsMetricDimensionTheFirstGroup_AThirdEvent = EventGroupsMetricDimensionTheFirstGroup::AThirdEvent;
 
-// Enum for event groups (Metric Dimension A second group)
-namespace __event_groups_metric_dimension_a_second_group_internal_scope_do_not_use__ {
+// Enum for project (Metric Dimension A second group)
+namespace __project_metric_dimension_a_second_group_internal_scope_do_not_use__ {
 enum Enum {
   This = 1,
   Is = 2,
   Another = 3,
   Test = 4,
 };
-}  // __event_groups_metric_dimension_a_second_group_internal_scope_do_not_use__
-using EventGroupsMetricDimensionASecondGroup = __event_groups_metric_dimension_a_second_group_internal_scope_do_not_use__::Enum;
+}  // __project_metric_dimension_a_second_group_internal_scope_do_not_use__
+using ProjectMetricDimensionASecondGroup = __project_metric_dimension_a_second_group_internal_scope_do_not_use__::Enum;
+// Alias for event groups (Metric Dimension A second group) which has the same event codes
+using EventGroupsMetricDimensionASecondGroup = ProjectMetricDimensionASecondGroup;
 const EventGroupsMetricDimensionASecondGroup EventGroupsMetricDimensionASecondGroup_This = EventGroupsMetricDimensionASecondGroup::This;
 const EventGroupsMetricDimensionASecondGroup EventGroupsMetricDimensionASecondGroup_Is = EventGroupsMetricDimensionASecondGroup::Is;
 const EventGroupsMetricDimensionASecondGroup EventGroupsMetricDimensionASecondGroup_Another = EventGroupsMetricDimensionASecondGroup::Another;
 const EventGroupsMetricDimensionASecondGroup EventGroupsMetricDimensionASecondGroup_Test = EventGroupsMetricDimensionASecondGroup::Test;
 
-// Enum for event groups (Metric Dimension 2)
-namespace __event_groups_metric_dimension_2_internal_scope_do_not_use__ {
+// Enum for project (Metric Dimension 2)
+namespace __project_metric_dimension_2_internal_scope_do_not_use__ {
 enum Enum {
   ThisMetric = 0,
   HasNo = 2,
   Name = 4,
   Alias = HasNo,
 };
-}  // __event_groups_metric_dimension_2_internal_scope_do_not_use__
-using EventGroupsMetricDimension2 = __event_groups_metric_dimension_2_internal_scope_do_not_use__::Enum;
+}  // __project_metric_dimension_2_internal_scope_do_not_use__
+using ProjectMetricDimension2 = __project_metric_dimension_2_internal_scope_do_not_use__::Enum;
+// Alias for event groups (Metric Dimension 2) which has the same event codes
+using EventGroupsMetricDimension2 = ProjectMetricDimension2;
 const EventGroupsMetricDimension2 EventGroupsMetricDimension2_ThisMetric = EventGroupsMetricDimension2::ThisMetric;
 const EventGroupsMetricDimension2 EventGroupsMetricDimension2_HasNo = EventGroupsMetricDimension2::HasNo;
 const EventGroupsMetricDimension2 EventGroupsMetricDimension2_Name = EventGroupsMetricDimension2::Name;
 const EventGroupsMetricDimension2 EventGroupsMetricDimension2_Alias = EventGroupsMetricDimension2::Alias;
 
-// Enum for metric (Metric Dimension First)
-namespace __metric_metric_dimension_first_internal_scope_do_not_use__ {
+// Enum for project (Metric Dimension First)
+namespace __project_metric_dimension_first_internal_scope_do_not_use__ {
 enum Enum {
   A = 1,
   Set = 2,
   OfEvent = 3,
   Codes = 4,
 };
-}  // __metric_metric_dimension_first_internal_scope_do_not_use__
-using MetricMetricDimensionFirst = __metric_metric_dimension_first_internal_scope_do_not_use__::Enum;
+}  // __project_metric_dimension_first_internal_scope_do_not_use__
+using ProjectMetricDimensionFirst = __project_metric_dimension_first_internal_scope_do_not_use__::Enum;
+// Alias for metric (Metric Dimension First) which has the same event codes
+using MetricMetricDimensionFirst = ProjectMetricDimensionFirst;
 const MetricMetricDimensionFirst MetricMetricDimensionFirst_A = MetricMetricDimensionFirst::A;
 const MetricMetricDimensionFirst MetricMetricDimensionFirst_Set = MetricMetricDimensionFirst::Set;
 const MetricMetricDimensionFirst MetricMetricDimensionFirst_OfEvent = MetricMetricDimensionFirst::OfEvent;
 const MetricMetricDimensionFirst MetricMetricDimensionFirst_Codes = MetricMetricDimensionFirst::Codes;
 
 // Alias for second metric (Metric Dimension First) which has the same event codes
-using SecondMetricMetricDimensionFirst = MetricMetricDimensionFirst;
+using SecondMetricMetricDimensionFirst = ProjectMetricDimensionFirst;
 const SecondMetricMetricDimensionFirst SecondMetricMetricDimensionFirst_A = SecondMetricMetricDimensionFirst::A;
 const SecondMetricMetricDimensionFirst SecondMetricMetricDimensionFirst_Set = SecondMetricMetricDimensionFirst::Set;
 const SecondMetricMetricDimensionFirst SecondMetricMetricDimensionFirst_OfEvent = SecondMetricMetricDimensionFirst::OfEvent;
 const SecondMetricMetricDimensionFirst SecondMetricMetricDimensionFirst_Codes = SecondMetricMetricDimensionFirst::Codes;
 
-// Enum for metric (Metric Dimension Second)
-namespace __metric_metric_dimension_second_internal_scope_do_not_use__ {
+// Enum for project (Metric Dimension Second)
+namespace __project_metric_dimension_second_internal_scope_do_not_use__ {
 enum Enum {
   Some = 0,
   More = 4,
   Event = 8,
   Codes = 16,
 };
-}  // __metric_metric_dimension_second_internal_scope_do_not_use__
-using MetricMetricDimensionSecond = __metric_metric_dimension_second_internal_scope_do_not_use__::Enum;
+}  // __project_metric_dimension_second_internal_scope_do_not_use__
+using ProjectMetricDimensionSecond = __project_metric_dimension_second_internal_scope_do_not_use__::Enum;
+// Alias for metric (Metric Dimension Second) which has the same event codes
+using MetricMetricDimensionSecond = ProjectMetricDimensionSecond;
 const MetricMetricDimensionSecond MetricMetricDimensionSecond_Some = MetricMetricDimensionSecond::Some;
 const MetricMetricDimensionSecond MetricMetricDimensionSecond_More = MetricMetricDimensionSecond::More;
 const MetricMetricDimensionSecond MetricMetricDimensionSecond_Event = MetricMetricDimensionSecond::Event;
 const MetricMetricDimensionSecond MetricMetricDimensionSecond_Codes = MetricMetricDimensionSecond::Codes;
 
 // Alias for second metric (Metric Dimension Second) which has the same event codes
-using SecondMetricMetricDimensionSecond = MetricMetricDimensionSecond;
+using SecondMetricMetricDimensionSecond = ProjectMetricDimensionSecond;
 const SecondMetricMetricDimensionSecond SecondMetricMetricDimensionSecond_Some = SecondMetricMetricDimensionSecond::Some;
 const SecondMetricMetricDimensionSecond SecondMetricMetricDimensionSecond_More = SecondMetricMetricDimensionSecond::More;
 const SecondMetricMetricDimensionSecond SecondMetricMetricDimensionSecond_Event = SecondMetricMetricDimensionSecond::Event;
diff --git a/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_filtered.cb.rs b/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_filtered.cb.rs
index 28ea75c..36bbdc4 100644
--- a/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_filtered.cb.rs
+++ b/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_filtered.cb.rs
@@ -43,50 +43,58 @@
 // Alias for event groups (Metric Dimension The First Group) which has the same event codes
 pub use TheOtherMetricNameMetricDimension0 as EventGroupsMetricDimensionTheFirstGroup;
 
-// Enum for event groups (Metric Dimension A second group)
+// Enum for project (Metric Dimension A second group)
 #[derive(Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Debug, Hash)]
-pub enum EventGroupsMetricDimensionASecondGroup {
+pub enum ProjectMetricDimensionASecondGroup {
   This = 1,
   Is = 2,
   Another = 3,
   Test = 4,
 }
+// Alias for event groups (Metric Dimension A second group) which has the same event codes
+pub use ProjectMetricDimensionASecondGroup as EventGroupsMetricDimensionASecondGroup;
 
-// Enum for event groups (Metric Dimension 2)
+// Enum for project (Metric Dimension 2)
 #[derive(Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Debug, Hash)]
-pub enum EventGroupsMetricDimension2 {
+pub enum ProjectMetricDimension2 {
   ThisMetric = 0,
   HasNo = 2,
   Name = 4,
 }
-impl EventGroupsMetricDimension2 {
+impl ProjectMetricDimension2 {
   #[allow(non_upper_case_globals)]
-  pub const Alias: EventGroupsMetricDimension2 = EventGroupsMetricDimension2::HasNo;
+  pub const Alias: ProjectMetricDimension2 = ProjectMetricDimension2::HasNo;
 }
+// Alias for event groups (Metric Dimension 2) which has the same event codes
+pub use ProjectMetricDimension2 as EventGroupsMetricDimension2;
 
-// Enum for metric (Metric Dimension First)
+// Enum for project (Metric Dimension First)
 #[derive(Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Debug, Hash)]
-pub enum MetricMetricDimensionFirst {
+pub enum ProjectMetricDimensionFirst {
   A = 1,
   Set = 2,
   OfEvent = 3,
   Codes = 4,
 }
+// Alias for metric (Metric Dimension First) which has the same event codes
+pub use ProjectMetricDimensionFirst as MetricMetricDimensionFirst;
 
 // Alias for second metric (Metric Dimension First) which has the same event codes
-pub use MetricMetricDimensionFirst as SecondMetricMetricDimensionFirst;
+pub use ProjectMetricDimensionFirst as SecondMetricMetricDimensionFirst;
 
-// Enum for metric (Metric Dimension Second)
+// Enum for project (Metric Dimension Second)
 #[derive(Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Debug, Hash)]
-pub enum MetricMetricDimensionSecond {
+pub enum ProjectMetricDimensionSecond {
   Some = 0,
   More = 4,
   Event = 8,
   Codes = 16,
 }
+// Alias for metric (Metric Dimension Second) which has the same event codes
+pub use ProjectMetricDimensionSecond as MetricMetricDimensionSecond;
 
 // Alias for second metric (Metric Dimension Second) which has the same event codes
-pub use MetricMetricDimensionSecond as SecondMetricMetricDimensionSecond;
+pub use ProjectMetricDimensionSecond as SecondMetricMetricDimensionSecond;
 
 // The base64 encoding of the bytes of a serialized CobaltRegistry proto message.
 pub const CONFIG: &str = "KoMGCghjdXN0b21lchAKGvQFCgdwcm9qZWN0EAUaQgoPdGhlX21ldHJpY19uYW1lEAoYBSBkYhEKCnRoZV9yZXBvcnQQChiPTmIWChB0aGVfb3RoZXJfcmVwb3J0EBQYAxpsChV0aGVfb3RoZXJfbWV0cmljX25hbWUQChgFIMgBKAFQAWIQCgp0aGVfcmVwb3J0EAoYB4IBNRILCAASB0FuRXZlbnQSEAgBEgxBbm90aGVyRXZlbnQSEQgCEg1BIHRoaXJkIGV2ZW50GMgBGucBCgxldmVudCBncm91cHMQChgFIKwCKAFQAWIQCgp0aGVfcmVwb3J0EB4YB4IBRQoPVGhlIEZpcnN0IEdyb3VwEgsIABIHQW5FdmVudBIQCAESDEFub3RoZXJFdmVudBIRCAISDUEgdGhpcmQgZXZlbnQYAoIBOQoOQSBzZWNvbmQgZ3JvdXASCAgBEgRUaGlzEgYIAhICSXMSCwgDEgdhbm90aGVyEggIBBIEVGVzdIIBNRIOCAASClRoaXNNZXRyaWMSCQgCEgVIYXNObxIICAQSBE5hbWUqDgoFSGFzTm8SBUFsaWFzGiAKDmxpbmVhciBidWNrZXRzEAoYBSCQA0IHEgUQjAEYBRoyChNleHBvbmVudGlhbCBidWNrZXRzEAoYBSD0A2IUCgZyZXBvcnQQKFIICgYQAxgCIAIadgoGbWV0cmljEAoYBSDYBIIBLwoFRmlyc3QSBQgBEgFBEgcIAhIDU2V0EgsIAxIHT2ZFdmVudBIJCAQSBUNvZGVzggEyCgZTZWNvbmQSCAgAEgRTb21lEggIBBIETW9yZRIJCAgSBUV2ZW50EgkIEBIFQ29kZXMafQoNc2Vjb25kIG1ldHJpYxAKGAUg2QSCAS8KBUZpcnN0EgUIARIBQRIHCAISA1NldBILCAMSB09mRXZlbnQSCQgEEgVDb2Rlc4IBMgoGU2Vjb25kEggIABIEU29tZRIICAQSBE1vcmUSCQgIEgVFdmVudBIJCBASBUNvZGVz";
diff --git a/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_for_testing.cb.go b/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_for_testing.cb.go
index 5050a6a..16bf9a1 100644
--- a/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_for_testing.cb.go
+++ b/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_for_testing.cb.go
@@ -57,50 +57,58 @@
 // Alias for event groups (Metric Dimension The First Group) which has the same event codes
 type EventGroupsMetricDimensionTheFirstGroup = TheOtherMetricNameMetricDimension0
 
-// Enum for event groups (Metric Dimension A second group)
-type EventGroupsMetricDimensionASecondGroup uint32
+// Enum for project (Metric Dimension A second group)
+type ProjectMetricDimensionASecondGroup uint32
 const (
-_ EventGroupsMetricDimensionASecondGroup = iota
+_ ProjectMetricDimensionASecondGroup = iota
   This = 1
   Is = 2
   Another = 3
   Test = 4
 )
+// Alias for event groups (Metric Dimension A second group) which has the same event codes
+type EventGroupsMetricDimensionASecondGroup = ProjectMetricDimensionASecondGroup
 
-// Enum for event groups (Metric Dimension 2)
-type EventGroupsMetricDimension2 uint32
+// Enum for project (Metric Dimension 2)
+type ProjectMetricDimension2 uint32
 const (
-_ EventGroupsMetricDimension2 = iota
+_ ProjectMetricDimension2 = iota
   ThisMetric = 0
   HasNo = 2
   Name = 4
 )
+// Alias for event groups (Metric Dimension 2) which has the same event codes
+type EventGroupsMetricDimension2 = ProjectMetricDimension2
 
-// Enum for metric (Metric Dimension First)
-type MetricMetricDimensionFirst uint32
+// Enum for project (Metric Dimension First)
+type ProjectMetricDimensionFirst uint32
 const (
-_ MetricMetricDimensionFirst = iota
+_ ProjectMetricDimensionFirst = iota
   A = 1
   Set = 2
   OfEvent = 3
   Codes = 4
 )
+// Alias for metric (Metric Dimension First) which has the same event codes
+type MetricMetricDimensionFirst = ProjectMetricDimensionFirst
 
 // Alias for second metric (Metric Dimension First) which has the same event codes
-type SecondMetricMetricDimensionFirst = MetricMetricDimensionFirst
+type SecondMetricMetricDimensionFirst = ProjectMetricDimensionFirst
 
-// Enum for metric (Metric Dimension Second)
-type MetricMetricDimensionSecond uint32
+// Enum for project (Metric Dimension Second)
+type ProjectMetricDimensionSecond uint32
 const (
-_ MetricMetricDimensionSecond = iota
+_ ProjectMetricDimensionSecond = iota
   Some = 0
   More = 4
   Event = 8
   Codes = 16
 )
+// Alias for metric (Metric Dimension Second) which has the same event codes
+type MetricMetricDimensionSecond = ProjectMetricDimensionSecond
 
 // Alias for second metric (Metric Dimension Second) which has the same event codes
-type SecondMetricMetricDimensionSecond = MetricMetricDimensionSecond
+type SecondMetricMetricDimensionSecond = ProjectMetricDimensionSecond
 
 // The base64 encoding of the bytes of a serialized CobaltRegistry proto message.
 const Config string = "KooHCghjdXN0b21lchAKGvsGCgdwcm9qZWN0EAUaVQoPdGhlX21ldHJpY19uYW1lEAoYBSBkYhEKCnRoZV9yZXBvcnQQChiPTmIWChB0aGVfb3RoZXJfcmVwb3J0EBQYA3IIY3VzdG9tZXJ6B3Byb2plY3QafwoVdGhlX290aGVyX21ldHJpY19uYW1lEAoYBSDIASgBUAFiEAoKdGhlX3JlcG9ydBAKGAdyCGN1c3RvbWVyegdwcm9qZWN0ggE1EgsIABIHQW5FdmVudBIQCAESDEFub3RoZXJFdmVudBIRCAISDUEgdGhpcmQgZXZlbnQYyAEa+gEKDGV2ZW50IGdyb3VwcxAKGAUgrAIoAVABYhAKCnRoZV9yZXBvcnQQHhgHcghjdXN0b21lcnoHcHJvamVjdIIBRQoPVGhlIEZpcnN0IEdyb3VwEgsIABIHQW5FdmVudBIQCAESDEFub3RoZXJFdmVudBIRCAISDUEgdGhpcmQgZXZlbnQYAoIBOQoOQSBzZWNvbmQgZ3JvdXASCAgBEgRUaGlzEgYIAhICSXMSCwgDEgdhbm90aGVyEggIBBIEVGVzdIIBNRIOCAASClRoaXNNZXRyaWMSCQgCEgVIYXNObxIICAQSBE5hbWUqDgoFSGFzTm8SBUFsaWFzGjMKDmxpbmVhciBidWNrZXRzEAoYBSCQA0IHEgUQjAEYBXIIY3VzdG9tZXJ6B3Byb2plY3QaRQoTZXhwb25lbnRpYWwgYnVja2V0cxAKGAUg9ANiFAoGcmVwb3J0EChSCAoGEAMYAiACcghjdXN0b21lcnoHcHJvamVjdBqJAQoGbWV0cmljEAoYBSDYBHIIY3VzdG9tZXJ6B3Byb2plY3SCAS8KBUZpcnN0EgUIARIBQRIHCAISA1NldBILCAMSB09mRXZlbnQSCQgEEgVDb2Rlc4IBMgoGU2Vjb25kEggIABIEU29tZRIICAQSBE1vcmUSCQgIEgVFdmVudBIJCBASBUNvZGVzGpABCg1zZWNvbmQgbWV0cmljEAoYBSDZBHIIY3VzdG9tZXJ6B3Byb2plY3SCAS8KBUZpcnN0EgUIARIBQRIHCAISA1NldBILCAMSB09mRXZlbnQSCQgEEgVDb2Rlc4IBMgoGU2Vjb25kEggIABIEU29tZRIICAQSBE1vcmUSCQgIEgVFdmVudBIJCBASBUNvZGVz";
diff --git a/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_for_testing.cb.h b/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_for_testing.cb.h
index c1190b4..841475d 100644
--- a/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_for_testing.cb.h
+++ b/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_for_testing.cb.h
@@ -68,75 +68,83 @@
 const EventGroupsMetricDimensionTheFirstGroup EventGroupsMetricDimensionTheFirstGroup_AnotherEvent = EventGroupsMetricDimensionTheFirstGroup::AnotherEvent;
 const EventGroupsMetricDimensionTheFirstGroup EventGroupsMetricDimensionTheFirstGroup_AThirdEvent = EventGroupsMetricDimensionTheFirstGroup::AThirdEvent;
 
-// Enum for event groups (Metric Dimension A second group)
-namespace __event_groups_metric_dimension_a_second_group_internal_scope_do_not_use__ {
+// Enum for project (Metric Dimension A second group)
+namespace __project_metric_dimension_a_second_group_internal_scope_do_not_use__ {
 enum Enum {
   This = 1,
   Is = 2,
   Another = 3,
   Test = 4,
 };
-}  // __event_groups_metric_dimension_a_second_group_internal_scope_do_not_use__
-using EventGroupsMetricDimensionASecondGroup = __event_groups_metric_dimension_a_second_group_internal_scope_do_not_use__::Enum;
+}  // __project_metric_dimension_a_second_group_internal_scope_do_not_use__
+using ProjectMetricDimensionASecondGroup = __project_metric_dimension_a_second_group_internal_scope_do_not_use__::Enum;
+// Alias for event groups (Metric Dimension A second group) which has the same event codes
+using EventGroupsMetricDimensionASecondGroup = ProjectMetricDimensionASecondGroup;
 const EventGroupsMetricDimensionASecondGroup EventGroupsMetricDimensionASecondGroup_This = EventGroupsMetricDimensionASecondGroup::This;
 const EventGroupsMetricDimensionASecondGroup EventGroupsMetricDimensionASecondGroup_Is = EventGroupsMetricDimensionASecondGroup::Is;
 const EventGroupsMetricDimensionASecondGroup EventGroupsMetricDimensionASecondGroup_Another = EventGroupsMetricDimensionASecondGroup::Another;
 const EventGroupsMetricDimensionASecondGroup EventGroupsMetricDimensionASecondGroup_Test = EventGroupsMetricDimensionASecondGroup::Test;
 
-// Enum for event groups (Metric Dimension 2)
-namespace __event_groups_metric_dimension_2_internal_scope_do_not_use__ {
+// Enum for project (Metric Dimension 2)
+namespace __project_metric_dimension_2_internal_scope_do_not_use__ {
 enum Enum {
   ThisMetric = 0,
   HasNo = 2,
   Name = 4,
   Alias = HasNo,
 };
-}  // __event_groups_metric_dimension_2_internal_scope_do_not_use__
-using EventGroupsMetricDimension2 = __event_groups_metric_dimension_2_internal_scope_do_not_use__::Enum;
+}  // __project_metric_dimension_2_internal_scope_do_not_use__
+using ProjectMetricDimension2 = __project_metric_dimension_2_internal_scope_do_not_use__::Enum;
+// Alias for event groups (Metric Dimension 2) which has the same event codes
+using EventGroupsMetricDimension2 = ProjectMetricDimension2;
 const EventGroupsMetricDimension2 EventGroupsMetricDimension2_ThisMetric = EventGroupsMetricDimension2::ThisMetric;
 const EventGroupsMetricDimension2 EventGroupsMetricDimension2_HasNo = EventGroupsMetricDimension2::HasNo;
 const EventGroupsMetricDimension2 EventGroupsMetricDimension2_Name = EventGroupsMetricDimension2::Name;
 const EventGroupsMetricDimension2 EventGroupsMetricDimension2_Alias = EventGroupsMetricDimension2::Alias;
 
-// Enum for metric (Metric Dimension First)
-namespace __metric_metric_dimension_first_internal_scope_do_not_use__ {
+// Enum for project (Metric Dimension First)
+namespace __project_metric_dimension_first_internal_scope_do_not_use__ {
 enum Enum {
   A = 1,
   Set = 2,
   OfEvent = 3,
   Codes = 4,
 };
-}  // __metric_metric_dimension_first_internal_scope_do_not_use__
-using MetricMetricDimensionFirst = __metric_metric_dimension_first_internal_scope_do_not_use__::Enum;
+}  // __project_metric_dimension_first_internal_scope_do_not_use__
+using ProjectMetricDimensionFirst = __project_metric_dimension_first_internal_scope_do_not_use__::Enum;
+// Alias for metric (Metric Dimension First) which has the same event codes
+using MetricMetricDimensionFirst = ProjectMetricDimensionFirst;
 const MetricMetricDimensionFirst MetricMetricDimensionFirst_A = MetricMetricDimensionFirst::A;
 const MetricMetricDimensionFirst MetricMetricDimensionFirst_Set = MetricMetricDimensionFirst::Set;
 const MetricMetricDimensionFirst MetricMetricDimensionFirst_OfEvent = MetricMetricDimensionFirst::OfEvent;
 const MetricMetricDimensionFirst MetricMetricDimensionFirst_Codes = MetricMetricDimensionFirst::Codes;
 
 // Alias for second metric (Metric Dimension First) which has the same event codes
-using SecondMetricMetricDimensionFirst = MetricMetricDimensionFirst;
+using SecondMetricMetricDimensionFirst = ProjectMetricDimensionFirst;
 const SecondMetricMetricDimensionFirst SecondMetricMetricDimensionFirst_A = SecondMetricMetricDimensionFirst::A;
 const SecondMetricMetricDimensionFirst SecondMetricMetricDimensionFirst_Set = SecondMetricMetricDimensionFirst::Set;
 const SecondMetricMetricDimensionFirst SecondMetricMetricDimensionFirst_OfEvent = SecondMetricMetricDimensionFirst::OfEvent;
 const SecondMetricMetricDimensionFirst SecondMetricMetricDimensionFirst_Codes = SecondMetricMetricDimensionFirst::Codes;
 
-// Enum for metric (Metric Dimension Second)
-namespace __metric_metric_dimension_second_internal_scope_do_not_use__ {
+// Enum for project (Metric Dimension Second)
+namespace __project_metric_dimension_second_internal_scope_do_not_use__ {
 enum Enum {
   Some = 0,
   More = 4,
   Event = 8,
   Codes = 16,
 };
-}  // __metric_metric_dimension_second_internal_scope_do_not_use__
-using MetricMetricDimensionSecond = __metric_metric_dimension_second_internal_scope_do_not_use__::Enum;
+}  // __project_metric_dimension_second_internal_scope_do_not_use__
+using ProjectMetricDimensionSecond = __project_metric_dimension_second_internal_scope_do_not_use__::Enum;
+// Alias for metric (Metric Dimension Second) which has the same event codes
+using MetricMetricDimensionSecond = ProjectMetricDimensionSecond;
 const MetricMetricDimensionSecond MetricMetricDimensionSecond_Some = MetricMetricDimensionSecond::Some;
 const MetricMetricDimensionSecond MetricMetricDimensionSecond_More = MetricMetricDimensionSecond::More;
 const MetricMetricDimensionSecond MetricMetricDimensionSecond_Event = MetricMetricDimensionSecond::Event;
 const MetricMetricDimensionSecond MetricMetricDimensionSecond_Codes = MetricMetricDimensionSecond::Codes;
 
 // Alias for second metric (Metric Dimension Second) which has the same event codes
-using SecondMetricMetricDimensionSecond = MetricMetricDimensionSecond;
+using SecondMetricMetricDimensionSecond = ProjectMetricDimensionSecond;
 const SecondMetricMetricDimensionSecond SecondMetricMetricDimensionSecond_Some = SecondMetricMetricDimensionSecond::Some;
 const SecondMetricMetricDimensionSecond SecondMetricMetricDimensionSecond_More = SecondMetricMetricDimensionSecond::More;
 const SecondMetricMetricDimensionSecond SecondMetricMetricDimensionSecond_Event = SecondMetricMetricDimensionSecond::Event;
diff --git a/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_for_testing.cb.rs b/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_for_testing.cb.rs
index 23d85fc..7ce06ca 100644
--- a/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_for_testing.cb.rs
+++ b/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_for_testing.cb.rs
@@ -55,50 +55,58 @@
 // Alias for event groups (Metric Dimension The First Group) which has the same event codes
 pub use TheOtherMetricNameMetricDimension0 as EventGroupsMetricDimensionTheFirstGroup;
 
-// Enum for event groups (Metric Dimension A second group)
+// Enum for project (Metric Dimension A second group)
 #[derive(Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Debug, Hash)]
-pub enum EventGroupsMetricDimensionASecondGroup {
+pub enum ProjectMetricDimensionASecondGroup {
   This = 1,
   Is = 2,
   Another = 3,
   Test = 4,
 }
+// Alias for event groups (Metric Dimension A second group) which has the same event codes
+pub use ProjectMetricDimensionASecondGroup as EventGroupsMetricDimensionASecondGroup;
 
-// Enum for event groups (Metric Dimension 2)
+// Enum for project (Metric Dimension 2)
 #[derive(Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Debug, Hash)]
-pub enum EventGroupsMetricDimension2 {
+pub enum ProjectMetricDimension2 {
   ThisMetric = 0,
   HasNo = 2,
   Name = 4,
 }
-impl EventGroupsMetricDimension2 {
+impl ProjectMetricDimension2 {
   #[allow(non_upper_case_globals)]
-  pub const Alias: EventGroupsMetricDimension2 = EventGroupsMetricDimension2::HasNo;
+  pub const Alias: ProjectMetricDimension2 = ProjectMetricDimension2::HasNo;
 }
+// Alias for event groups (Metric Dimension 2) which has the same event codes
+pub use ProjectMetricDimension2 as EventGroupsMetricDimension2;
 
-// Enum for metric (Metric Dimension First)
+// Enum for project (Metric Dimension First)
 #[derive(Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Debug, Hash)]
-pub enum MetricMetricDimensionFirst {
+pub enum ProjectMetricDimensionFirst {
   A = 1,
   Set = 2,
   OfEvent = 3,
   Codes = 4,
 }
+// Alias for metric (Metric Dimension First) which has the same event codes
+pub use ProjectMetricDimensionFirst as MetricMetricDimensionFirst;
 
 // Alias for second metric (Metric Dimension First) which has the same event codes
-pub use MetricMetricDimensionFirst as SecondMetricMetricDimensionFirst;
+pub use ProjectMetricDimensionFirst as SecondMetricMetricDimensionFirst;
 
-// Enum for metric (Metric Dimension Second)
+// Enum for project (Metric Dimension Second)
 #[derive(Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Debug, Hash)]
-pub enum MetricMetricDimensionSecond {
+pub enum ProjectMetricDimensionSecond {
   Some = 0,
   More = 4,
   Event = 8,
   Codes = 16,
 }
+// Alias for metric (Metric Dimension Second) which has the same event codes
+pub use ProjectMetricDimensionSecond as MetricMetricDimensionSecond;
 
 // Alias for second metric (Metric Dimension Second) which has the same event codes
-pub use MetricMetricDimensionSecond as SecondMetricMetricDimensionSecond;
+pub use ProjectMetricDimensionSecond as SecondMetricMetricDimensionSecond;
 
 // The base64 encoding of the bytes of a serialized CobaltRegistry proto message.
 pub const CONFIG: &str = "KooHCghjdXN0b21lchAKGvsGCgdwcm9qZWN0EAUaVQoPdGhlX21ldHJpY19uYW1lEAoYBSBkYhEKCnRoZV9yZXBvcnQQChiPTmIWChB0aGVfb3RoZXJfcmVwb3J0EBQYA3IIY3VzdG9tZXJ6B3Byb2plY3QafwoVdGhlX290aGVyX21ldHJpY19uYW1lEAoYBSDIASgBUAFiEAoKdGhlX3JlcG9ydBAKGAdyCGN1c3RvbWVyegdwcm9qZWN0ggE1EgsIABIHQW5FdmVudBIQCAESDEFub3RoZXJFdmVudBIRCAISDUEgdGhpcmQgZXZlbnQYyAEa+gEKDGV2ZW50IGdyb3VwcxAKGAUgrAIoAVABYhAKCnRoZV9yZXBvcnQQHhgHcghjdXN0b21lcnoHcHJvamVjdIIBRQoPVGhlIEZpcnN0IEdyb3VwEgsIABIHQW5FdmVudBIQCAESDEFub3RoZXJFdmVudBIRCAISDUEgdGhpcmQgZXZlbnQYAoIBOQoOQSBzZWNvbmQgZ3JvdXASCAgBEgRUaGlzEgYIAhICSXMSCwgDEgdhbm90aGVyEggIBBIEVGVzdIIBNRIOCAASClRoaXNNZXRyaWMSCQgCEgVIYXNObxIICAQSBE5hbWUqDgoFSGFzTm8SBUFsaWFzGjMKDmxpbmVhciBidWNrZXRzEAoYBSCQA0IHEgUQjAEYBXIIY3VzdG9tZXJ6B3Byb2plY3QaRQoTZXhwb25lbnRpYWwgYnVja2V0cxAKGAUg9ANiFAoGcmVwb3J0EChSCAoGEAMYAiACcghjdXN0b21lcnoHcHJvamVjdBqJAQoGbWV0cmljEAoYBSDYBHIIY3VzdG9tZXJ6B3Byb2plY3SCAS8KBUZpcnN0EgUIARIBQRIHCAISA1NldBILCAMSB09mRXZlbnQSCQgEEgVDb2Rlc4IBMgoGU2Vjb25kEggIABIEU29tZRIICAQSBE1vcmUSCQgIEgVFdmVudBIJCBASBUNvZGVzGpABCg1zZWNvbmQgbWV0cmljEAoYBSDZBHIIY3VzdG9tZXJ6B3Byb2plY3SCAS8KBUZpcnN0EgUIARIBQRIHCAISA1NldBILCAMSB09mRXZlbnQSCQgEEgVDb2Rlc4IBMgoGU2Vjb25kEggIABIEU29tZRIICAQSBE1vcmUSCQgIEgVFdmVudBIJCBASBUNvZGVz";
diff --git a/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_with_ns.cb.h b/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_with_ns.cb.h
index 1406e4c..e9076a5 100644
--- a/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_with_ns.cb.h
+++ b/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_with_ns.cb.h
@@ -57,75 +57,83 @@
 const EventGroupsMetricDimensionTheFirstGroup EventGroupsMetricDimensionTheFirstGroup_AnotherEvent = EventGroupsMetricDimensionTheFirstGroup::AnotherEvent;
 const EventGroupsMetricDimensionTheFirstGroup EventGroupsMetricDimensionTheFirstGroup_AThirdEvent = EventGroupsMetricDimensionTheFirstGroup::AThirdEvent;
 
-// Enum for event groups (Metric Dimension A second group)
-namespace __event_groups_metric_dimension_a_second_group_internal_scope_do_not_use__ {
+// Enum for project (Metric Dimension A second group)
+namespace __project_metric_dimension_a_second_group_internal_scope_do_not_use__ {
 enum Enum {
   This = 1,
   Is = 2,
   Another = 3,
   Test = 4,
 };
-}  // __event_groups_metric_dimension_a_second_group_internal_scope_do_not_use__
-using EventGroupsMetricDimensionASecondGroup = __event_groups_metric_dimension_a_second_group_internal_scope_do_not_use__::Enum;
+}  // __project_metric_dimension_a_second_group_internal_scope_do_not_use__
+using ProjectMetricDimensionASecondGroup = __project_metric_dimension_a_second_group_internal_scope_do_not_use__::Enum;
+// Alias for event groups (Metric Dimension A second group) which has the same event codes
+using EventGroupsMetricDimensionASecondGroup = ProjectMetricDimensionASecondGroup;
 const EventGroupsMetricDimensionASecondGroup EventGroupsMetricDimensionASecondGroup_This = EventGroupsMetricDimensionASecondGroup::This;
 const EventGroupsMetricDimensionASecondGroup EventGroupsMetricDimensionASecondGroup_Is = EventGroupsMetricDimensionASecondGroup::Is;
 const EventGroupsMetricDimensionASecondGroup EventGroupsMetricDimensionASecondGroup_Another = EventGroupsMetricDimensionASecondGroup::Another;
 const EventGroupsMetricDimensionASecondGroup EventGroupsMetricDimensionASecondGroup_Test = EventGroupsMetricDimensionASecondGroup::Test;
 
-// Enum for event groups (Metric Dimension 2)
-namespace __event_groups_metric_dimension_2_internal_scope_do_not_use__ {
+// Enum for project (Metric Dimension 2)
+namespace __project_metric_dimension_2_internal_scope_do_not_use__ {
 enum Enum {
   ThisMetric = 0,
   HasNo = 2,
   Name = 4,
   Alias = HasNo,
 };
-}  // __event_groups_metric_dimension_2_internal_scope_do_not_use__
-using EventGroupsMetricDimension2 = __event_groups_metric_dimension_2_internal_scope_do_not_use__::Enum;
+}  // __project_metric_dimension_2_internal_scope_do_not_use__
+using ProjectMetricDimension2 = __project_metric_dimension_2_internal_scope_do_not_use__::Enum;
+// Alias for event groups (Metric Dimension 2) which has the same event codes
+using EventGroupsMetricDimension2 = ProjectMetricDimension2;
 const EventGroupsMetricDimension2 EventGroupsMetricDimension2_ThisMetric = EventGroupsMetricDimension2::ThisMetric;
 const EventGroupsMetricDimension2 EventGroupsMetricDimension2_HasNo = EventGroupsMetricDimension2::HasNo;
 const EventGroupsMetricDimension2 EventGroupsMetricDimension2_Name = EventGroupsMetricDimension2::Name;
 const EventGroupsMetricDimension2 EventGroupsMetricDimension2_Alias = EventGroupsMetricDimension2::Alias;
 
-// Enum for metric (Metric Dimension First)
-namespace __metric_metric_dimension_first_internal_scope_do_not_use__ {
+// Enum for project (Metric Dimension First)
+namespace __project_metric_dimension_first_internal_scope_do_not_use__ {
 enum Enum {
   A = 1,
   Set = 2,
   OfEvent = 3,
   Codes = 4,
 };
-}  // __metric_metric_dimension_first_internal_scope_do_not_use__
-using MetricMetricDimensionFirst = __metric_metric_dimension_first_internal_scope_do_not_use__::Enum;
+}  // __project_metric_dimension_first_internal_scope_do_not_use__
+using ProjectMetricDimensionFirst = __project_metric_dimension_first_internal_scope_do_not_use__::Enum;
+// Alias for metric (Metric Dimension First) which has the same event codes
+using MetricMetricDimensionFirst = ProjectMetricDimensionFirst;
 const MetricMetricDimensionFirst MetricMetricDimensionFirst_A = MetricMetricDimensionFirst::A;
 const MetricMetricDimensionFirst MetricMetricDimensionFirst_Set = MetricMetricDimensionFirst::Set;
 const MetricMetricDimensionFirst MetricMetricDimensionFirst_OfEvent = MetricMetricDimensionFirst::OfEvent;
 const MetricMetricDimensionFirst MetricMetricDimensionFirst_Codes = MetricMetricDimensionFirst::Codes;
 
 // Alias for second metric (Metric Dimension First) which has the same event codes
-using SecondMetricMetricDimensionFirst = MetricMetricDimensionFirst;
+using SecondMetricMetricDimensionFirst = ProjectMetricDimensionFirst;
 const SecondMetricMetricDimensionFirst SecondMetricMetricDimensionFirst_A = SecondMetricMetricDimensionFirst::A;
 const SecondMetricMetricDimensionFirst SecondMetricMetricDimensionFirst_Set = SecondMetricMetricDimensionFirst::Set;
 const SecondMetricMetricDimensionFirst SecondMetricMetricDimensionFirst_OfEvent = SecondMetricMetricDimensionFirst::OfEvent;
 const SecondMetricMetricDimensionFirst SecondMetricMetricDimensionFirst_Codes = SecondMetricMetricDimensionFirst::Codes;
 
-// Enum for metric (Metric Dimension Second)
-namespace __metric_metric_dimension_second_internal_scope_do_not_use__ {
+// Enum for project (Metric Dimension Second)
+namespace __project_metric_dimension_second_internal_scope_do_not_use__ {
 enum Enum {
   Some = 0,
   More = 4,
   Event = 8,
   Codes = 16,
 };
-}  // __metric_metric_dimension_second_internal_scope_do_not_use__
-using MetricMetricDimensionSecond = __metric_metric_dimension_second_internal_scope_do_not_use__::Enum;
+}  // __project_metric_dimension_second_internal_scope_do_not_use__
+using ProjectMetricDimensionSecond = __project_metric_dimension_second_internal_scope_do_not_use__::Enum;
+// Alias for metric (Metric Dimension Second) which has the same event codes
+using MetricMetricDimensionSecond = ProjectMetricDimensionSecond;
 const MetricMetricDimensionSecond MetricMetricDimensionSecond_Some = MetricMetricDimensionSecond::Some;
 const MetricMetricDimensionSecond MetricMetricDimensionSecond_More = MetricMetricDimensionSecond::More;
 const MetricMetricDimensionSecond MetricMetricDimensionSecond_Event = MetricMetricDimensionSecond::Event;
 const MetricMetricDimensionSecond MetricMetricDimensionSecond_Codes = MetricMetricDimensionSecond::Codes;
 
 // Alias for second metric (Metric Dimension Second) which has the same event codes
-using SecondMetricMetricDimensionSecond = MetricMetricDimensionSecond;
+using SecondMetricMetricDimensionSecond = ProjectMetricDimensionSecond;
 const SecondMetricMetricDimensionSecond SecondMetricMetricDimensionSecond_Some = SecondMetricMetricDimensionSecond::Some;
 const SecondMetricMetricDimensionSecond SecondMetricMetricDimensionSecond_More = SecondMetricMetricDimensionSecond::More;
 const SecondMetricMetricDimensionSecond SecondMetricMetricDimensionSecond_Event = SecondMetricMetricDimensionSecond::Event;
diff --git a/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_with_ns.cb.rs b/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_with_ns.cb.rs
index c105d6b..fe35271 100644
--- a/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_with_ns.cb.rs
+++ b/src/bin/config_parser/src/source_generator/source_generator_test_files/golden_with_ns.cb.rs
@@ -44,50 +44,58 @@
 // Alias for event groups (Metric Dimension The First Group) which has the same event codes
 pub use TheOtherMetricNameMetricDimension0 as EventGroupsMetricDimensionTheFirstGroup;
 
-// Enum for event groups (Metric Dimension A second group)
+// Enum for project (Metric Dimension A second group)
 #[derive(Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Debug, Hash)]
-pub enum EventGroupsMetricDimensionASecondGroup {
+pub enum ProjectMetricDimensionASecondGroup {
   This = 1,
   Is = 2,
   Another = 3,
   Test = 4,
 }
+// Alias for event groups (Metric Dimension A second group) which has the same event codes
+pub use ProjectMetricDimensionASecondGroup as EventGroupsMetricDimensionASecondGroup;
 
-// Enum for event groups (Metric Dimension 2)
+// Enum for project (Metric Dimension 2)
 #[derive(Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Debug, Hash)]
-pub enum EventGroupsMetricDimension2 {
+pub enum ProjectMetricDimension2 {
   ThisMetric = 0,
   HasNo = 2,
   Name = 4,
 }
-impl EventGroupsMetricDimension2 {
+impl ProjectMetricDimension2 {
   #[allow(non_upper_case_globals)]
-  pub const Alias: EventGroupsMetricDimension2 = EventGroupsMetricDimension2::HasNo;
+  pub const Alias: ProjectMetricDimension2 = ProjectMetricDimension2::HasNo;
 }
+// Alias for event groups (Metric Dimension 2) which has the same event codes
+pub use ProjectMetricDimension2 as EventGroupsMetricDimension2;
 
-// Enum for metric (Metric Dimension First)
+// Enum for project (Metric Dimension First)
 #[derive(Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Debug, Hash)]
-pub enum MetricMetricDimensionFirst {
+pub enum ProjectMetricDimensionFirst {
   A = 1,
   Set = 2,
   OfEvent = 3,
   Codes = 4,
 }
+// Alias for metric (Metric Dimension First) which has the same event codes
+pub use ProjectMetricDimensionFirst as MetricMetricDimensionFirst;
 
 // Alias for second metric (Metric Dimension First) which has the same event codes
-pub use MetricMetricDimensionFirst as SecondMetricMetricDimensionFirst;
+pub use ProjectMetricDimensionFirst as SecondMetricMetricDimensionFirst;
 
-// Enum for metric (Metric Dimension Second)
+// Enum for project (Metric Dimension Second)
 #[derive(Clone, Copy, PartialEq, PartialOrd, Eq, Ord, Debug, Hash)]
-pub enum MetricMetricDimensionSecond {
+pub enum ProjectMetricDimensionSecond {
   Some = 0,
   More = 4,
   Event = 8,
   Codes = 16,
 }
+// Alias for metric (Metric Dimension Second) which has the same event codes
+pub use ProjectMetricDimensionSecond as MetricMetricDimensionSecond;
 
 // Alias for second metric (Metric Dimension Second) which has the same event codes
-pub use MetricMetricDimensionSecond as SecondMetricMetricDimensionSecond;
+pub use ProjectMetricDimensionSecond as SecondMetricMetricDimensionSecond;
 
 // The base64 encoding of the bytes of a serialized CobaltRegistry proto message.
 pub const CONFIG: &str = "KooHCghjdXN0b21lchAKGvsGCgdwcm9qZWN0EAUaVQoPdGhlX21ldHJpY19uYW1lEAoYBSBkYhEKCnRoZV9yZXBvcnQQChiPTmIWChB0aGVfb3RoZXJfcmVwb3J0EBQYA3IIY3VzdG9tZXJ6B3Byb2plY3QafwoVdGhlX290aGVyX21ldHJpY19uYW1lEAoYBSDIASgBUAFiEAoKdGhlX3JlcG9ydBAKGAdyCGN1c3RvbWVyegdwcm9qZWN0ggE1EgsIABIHQW5FdmVudBIQCAESDEFub3RoZXJFdmVudBIRCAISDUEgdGhpcmQgZXZlbnQYyAEa+gEKDGV2ZW50IGdyb3VwcxAKGAUgrAIoAVABYhAKCnRoZV9yZXBvcnQQHhgHcghjdXN0b21lcnoHcHJvamVjdIIBRQoPVGhlIEZpcnN0IEdyb3VwEgsIABIHQW5FdmVudBIQCAESDEFub3RoZXJFdmVudBIRCAISDUEgdGhpcmQgZXZlbnQYAoIBOQoOQSBzZWNvbmQgZ3JvdXASCAgBEgRUaGlzEgYIAhICSXMSCwgDEgdhbm90aGVyEggIBBIEVGVzdIIBNRIOCAASClRoaXNNZXRyaWMSCQgCEgVIYXNObxIICAQSBE5hbWUqDgoFSGFzTm8SBUFsaWFzGjMKDmxpbmVhciBidWNrZXRzEAoYBSCQA0IHEgUQjAEYBXIIY3VzdG9tZXJ6B3Byb2plY3QaRQoTZXhwb25lbnRpYWwgYnVja2V0cxAKGAUg9ANiFAoGcmVwb3J0EChSCAoGEAMYAiACcghjdXN0b21lcnoHcHJvamVjdBqJAQoGbWV0cmljEAoYBSDYBHIIY3VzdG9tZXJ6B3Byb2plY3SCAS8KBUZpcnN0EgUIARIBQRIHCAISA1NldBILCAMSB09mRXZlbnQSCQgEEgVDb2Rlc4IBMgoGU2Vjb25kEggIABIEU29tZRIICAQSBE1vcmUSCQgIEgVFdmVudBIJCBASBUNvZGVzGpABCg1zZWNvbmQgbWV0cmljEAoYBSDZBHIIY3VzdG9tZXJ6B3Byb2plY3SCAS8KBUZpcnN0EgUIARIBQRIHCAISA1NldBILCAMSB09mRXZlbnQSCQgEEgVDb2Rlc4IBMgoGU2Vjb25kEggIABIEU29tZRIICAQSBE1vcmUSCQgIEgVFdmVudBIJCBASBUNvZGVz";
diff --git a/src/bin/config_parser/src/source_generator/source_outputter.go b/src/bin/config_parser/src/source_generator/source_outputter.go
index 4a62693..2a850cc 100644
--- a/src/bin/config_parser/src/source_generator/source_outputter.go
+++ b/src/bin/config_parser/src/source_generator/source_outputter.go
@@ -129,7 +129,7 @@
 // export the enum values. For a metric called "foo_bar" with a event named
 // "baz", it would generate the constant:
 // "FooBarEventCode_Baz = FooBarEventCode::Baz"
-func (so *sourceOutputter) writeEnum(entry EnumEntry) {
+func (so *sourceOutputter) writeEnum(entry EnumEntry, projectName string, allEnums []EnumEntry) {
 	if len(entry.events) == 0 {
 		return
 	}
@@ -144,23 +144,59 @@
 	}
 	sort.Slice(keys, func(i, j int) bool { return keys[i] < keys[j] })
 
+	hasGlobalName := so.language.supportsTypeAlias()
+	firstSuffix := entry.names[0].suffix
+
+	if so.language.supportsTypeAlias() {
+		// Verify that all suffixes are the same for this entry
+		for _, name := range entry.names {
+			if name.suffix != firstSuffix {
+				hasGlobalName = false
+			}
+		}
+
+		// Verify that no other entry has this suffix
+		for _, enum := range allEnums {
+			if !reflect.DeepEqual(enum, entry) {
+				for _, name := range enum.names {
+					if name.suffix == firstSuffix {
+						hasGlobalName = false
+					}
+				}
+			}
+		}
+	}
+
+	projectNamePrefix := projectName
+
 	for i, name := range entry.names {
 		if i == 0 || !so.language.supportsTypeAlias() {
-			so.writeCommentFmt("Enum for %s (%s)", name.prefix, name.suffix)
-			so.language.writeEnumBegin(so, name.prefix, name.suffix)
+			prefix := name.prefix
+			if hasGlobalName {
+				prefix = projectNamePrefix
+			}
+			so.writeCommentFmt("Enum for %s (%s)", prefix, name.suffix)
+			so.language.writeEnumBegin(so, prefix, name.suffix)
 			for _, id := range keys {
 				name := entry.events[id]
 				so.language.writeEnumEntry(so, id, name)
 			}
 			if len(entry.aliases) > 0 {
-				so.language.writeEnumAliasesBegin(so, name.prefix, name.suffix)
+				so.language.writeEnumAliasesBegin(so, prefix, name.suffix)
 				for from, to := range entry.aliases {
-					so.language.writeEnumAlias(so, []string{name.prefix, name.suffix}, []string{from}, []string{to})
+					so.language.writeEnumAlias(so, []string{prefix, name.suffix}, []string{from}, []string{to})
 				}
 			}
-			so.language.writeEnumEnd(so, name.prefix, name.suffix)
+			so.language.writeEnumEnd(so, prefix, name.suffix)
+			if hasGlobalName {
+				so.writeCommentFmt("Alias for %s (%s) which has the same event codes", name.prefix, name.suffix)
+				so.language.writeTypeAlias(so, []string{prefix, name.suffix}, []string{name.prefix, name.suffix})
+			}
 		} else {
 			first := entry.names[0]
+			if hasGlobalName {
+				first = EnumName{prefix: projectNamePrefix, suffix: first.suffix}
+			}
 			so.writeCommentFmt("Alias for %s (%s) which has the same event codes", name.prefix, name.suffix)
 			so.language.writeTypeAlias(so, []string{first.prefix, first.suffix}, []string{name.prefix, name.suffix})
 		}
@@ -269,7 +305,7 @@
 	}
 
 	for _, e := range enums {
-		so.writeEnum(e)
+		so.writeEnum(e, c.Customers[0].Projects[0].ProjectName, enums)
 	}
 
 	return nil