private static IEnumerable HandleMetadata()

in src/Core/Compiling/Policy/TraceCompiler.cs [61:104]


    private static IEnumerable<object> HandleMetadata(ICompilationContext context, InitializerValue metadata)
    {
        List<object> elements = new();
        foreach (InitializerValue data in metadata.UnnamedValues ?? [])
        {
            if (!data.TryGetValues<TraceMetadata>(out IReadOnlyDictionary<string, InitializerValue>? metadataValues))
            {
                context.Report(Diagnostic.Create(
                    CompilationErrors.PolicyArgumentIsNotOfRequiredType,
                    data.Node.GetLocation(),
                    "trace.metadata",
                    nameof(TraceMetadata)
                ));
                continue;
            }

            XElement xMetadata = new("metadata");
            if (!xMetadata.AddAttribute(metadataValues, nameof(TraceMetadata.Name), "name"))
            {
                context.Report(Diagnostic.Create(
                    CompilationErrors.RequiredParameterNotDefined,
                    data.Node.GetLocation(),
                    "trace.metadata",
                    nameof(TraceMetadata.Name)
                ));
                continue;
            }

            if (!xMetadata.AddAttribute(metadataValues, nameof(TraceMetadata.Value), "value"))
            {
                context.Report(Diagnostic.Create(
                    CompilationErrors.RequiredParameterNotDefined,
                    data.Node.GetLocation(),
                    "trace.metadata",
                    nameof(TraceMetadata.Value)
                ));
                continue;
            }

            elements.Add(xMetadata);
        }

        return elements;
    }