private CodeTypeDeclaration CreateMetricDataClass()

in telemetry/csharp/AwsToolkit.Telemetry.Events.Generator.Core/DefinitionsBuilder.cs [282:343]


        private CodeTypeDeclaration CreateMetricDataClass(Metric metric)
        {
            var cls = new CodeTypeDeclaration
            {
                IsClass = true,
                Name = SanitizeName(metric.name),
                TypeAttributes = TypeAttributes.Public | TypeAttributes.Sealed
            };

            cls.BaseTypes.Add("BaseTelemetryEvent");

            if (!string.IsNullOrWhiteSpace(metric.description))
            {
                cls.Comments.Add(new CodeCommentStatement(metric.description, true));
            }

            // Generate the constructor
            var typeConstructor = new CodeConstructor {Attributes = MemberAttributes.Public};

            // Initialize the passive field based on this metric declaration
            // Generate: this.Passive = true/false;
            var passiveFieldRef = new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "Passive");
            typeConstructor.Statements.Add(new CodeAssignStatement(passiveFieldRef, new CodePrimitiveExpression(metric.passive)));

            // Initialize the TrackPerformance field based on this metric declaration
            // Generate: this.TrackPerformance = true/false;
            var performanceFieldRef = new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "TrackPerformance");
            typeConstructor.Statements.Add(new CodeAssignStatement(performanceFieldRef, new CodePrimitiveExpression(metric.trackPerformance)));

            cls.Members.Add(typeConstructor);

            // Generate the class members
            metric.metadata?
                .Where(metadata => !ImplicitFields.Contains(metadata.type))
                .ToList().ForEach(metadata =>
                {
                    var metricType = GetMetricType(metadata.type);
                    var fieldName = metadata.type.ToPascalCase();

                    var generatedTypeName = metricType.GetGeneratedTypeName();

                    if (IsNullable(metadata))
                    {
                        generatedTypeName += "?";
                    }

                    var field = new CodeMemberField(generatedTypeName, fieldName)
                    {
                        Attributes = MemberAttributes.Public
                    };

                    var description = $"{(metadata.ResolvedRequired ? "" : "Optional - ")}{metricType.description ?? string.Empty}";
                    if (!string.IsNullOrEmpty(description))
                    {
                        field.Comments.Add(new CodeCommentStatement(description, true));
                    }

                    cls.Members.Add(field);
                });

            return cls;
        }