private static void HandleKeys()

in src/Core/Compiling/Policy/ValidateJwtCompiler.cs [108:199]


    private static void HandleKeys(
        ICompilationContext context,
        XElement element,
        IReadOnlyDictionary<string, InitializerValue> values,
        string key,
        string listName)
    {
        if (!values.TryGetValue(key, out var listInitializer))
        {
            return;
        }

        var listElement = new XElement(listName);
        foreach (var initializer in listInitializer.UnnamedValues ?? [])
        {
            var keyValues = initializer.NamedValues;
            if (keyValues is null)
            {
                continue;
            }

            var keyElement = new XElement("key");
            keyElement.AddAttribute(keyValues, nameof(KeyConfig.Id), "id");
            switch (initializer.Type)
            {
                case nameof(Base64KeyConfig):
                    if (!keyValues.TryGetValue(nameof(Base64KeyConfig.Value), out var value))
                    {
                        context.Report(Diagnostic.Create(
                            CompilationErrors.RequiredParameterNotDefined,
                            initializer.Node.GetLocation(),
                            "key",
                            nameof(Base64KeyConfig.Value)
                        ));
                        continue;
                    }

                    keyElement.Value = value.Value!;
                    break;
                case nameof(CertificateKeyConfig):
                    if (!keyElement.AddAttribute(keyValues, nameof(CertificateKeyConfig.CertificateId),
                            "certificate-id"))
                    {
                        context.Report(Diagnostic.Create(
                            CompilationErrors.RequiredParameterNotDefined,
                            initializer.Node.GetLocation(),
                            "key",
                            nameof(CertificateKeyConfig.CertificateId)
                        ));
                        continue;
                    }

                    break;
                case nameof(AsymmetricKeyConfig):
                    if (!keyElement.AddAttribute(keyValues, nameof(AsymmetricKeyConfig.Modulus), "n"))
                    {
                        context.Report(Diagnostic.Create(
                            CompilationErrors.RequiredParameterNotDefined,
                            initializer.Node.GetLocation(),
                            "key",
                            nameof(AsymmetricKeyConfig.Modulus)
                        ));
                        continue;
                    }

                    if (!keyElement.AddAttribute(keyValues, nameof(AsymmetricKeyConfig.Exponent), "e"))
                    {
                        context.Report(Diagnostic.Create(
                            CompilationErrors.RequiredParameterNotDefined,
                            initializer.Node.GetLocation(),
                            "key",
                            nameof(AsymmetricKeyConfig.Exponent)
                        ));
                        continue;
                    }

                    break;
                default:
                    context.Report(Diagnostic.Create(
                        CompilationErrors.NotSupportedType,
                        initializer.Node.GetLocation(),
                        "key",
                        initializer.Type
                    ));
                    continue;
            }

            listElement.Add(keyElement);
        }

        element.Add(listElement);
    }