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