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;
}