private bool TryParseValueByType()

in sdk/Sdk.Generators/FunctionMetadataProviderGenerator/FunctionMetadataProviderGenerator.Parser.cs [730:762]


            private bool TryParseValueByType(TypedConstant attributeArg, out object? argValue)
            {
                argValue = null;

                switch (attributeArg.Kind)
                {
                    case TypedConstantKind.Primitive:
                        argValue = attributeArg.Value;
                        break;

                    case TypedConstantKind.Enum:
                        var enumValue = attributeArg.Type!.GetMembers()
                            .FirstOrDefault(m => m is IFieldSymbol field
                                && field.ConstantValue is object value
                                && value.Equals(attributeArg.Value));

                        if (enumValue is null)
                        {
                            return false;
                        }

                        // we want just the enumValue symbol's name (ex: Admin, Anonymous, Function)
                        argValue = enumValue.Name;
                        break;

                    case TypedConstantKind.Array:
                        var arrayValues = attributeArg.Values.Select(a => a.Value?.ToString()).ToArray();
                        argValue = arrayValues;
                        break;
                }

                return argValue is not null;
            }