mirror of
https://github.com/actions/runner.git
synced 2025-12-18 08:17:02 +00:00
Compare updated template evaluator (#4092)
This commit is contained in:
76
src/Sdk/WorkflowParser/Conversion/TemplateTokenExtensions.cs
Normal file
76
src/Sdk/WorkflowParser/Conversion/TemplateTokenExtensions.cs
Normal file
@@ -0,0 +1,76 @@
|
||||
#nullable disable // Consider removing in the future to minimize likelihood of NullReferenceException; refer https://learn.microsoft.com/en-us/dotnet/csharp/nullable-references
|
||||
|
||||
using System;
|
||||
using GitHub.Actions.Expressions.Data;
|
||||
using GitHub.Actions.WorkflowParser.ObjectTemplating.Tokens;
|
||||
|
||||
namespace GitHub.Actions.WorkflowParser.Conversion
|
||||
{
|
||||
internal static class TemplateTokenExtensions
|
||||
{
|
||||
public static ArrayExpressionData ToExpressionData(this SequenceToken sequence)
|
||||
{
|
||||
var token = sequence as TemplateToken;
|
||||
var expressionData = token.ToExpressionData();
|
||||
return expressionData.AssertArray("converted sequence token");
|
||||
}
|
||||
|
||||
public static DictionaryExpressionData ToExpressionData(this MappingToken mapping)
|
||||
{
|
||||
var token = mapping as TemplateToken;
|
||||
var expressionData = token.ToExpressionData();
|
||||
return expressionData.AssertDictionary("converted mapping token");
|
||||
}
|
||||
|
||||
public static ExpressionData ToExpressionData(this TemplateToken token)
|
||||
{
|
||||
switch (token.Type)
|
||||
{
|
||||
case TokenType.Mapping:
|
||||
var mapping = token as MappingToken;
|
||||
var dictionary = new DictionaryExpressionData();
|
||||
if (mapping.Count > 0)
|
||||
{
|
||||
foreach (var pair in mapping)
|
||||
{
|
||||
var keyLiteral = pair.Key.AssertString("dictionary context data key");
|
||||
var key = keyLiteral.Value;
|
||||
var value = pair.Value.ToExpressionData();
|
||||
dictionary.Add(key, value);
|
||||
}
|
||||
}
|
||||
return dictionary;
|
||||
|
||||
case TokenType.Sequence:
|
||||
var sequence = token as SequenceToken;
|
||||
var array = new ArrayExpressionData();
|
||||
if (sequence.Count > 0)
|
||||
{
|
||||
foreach (var item in sequence)
|
||||
{
|
||||
array.Add(item.ToExpressionData());
|
||||
}
|
||||
}
|
||||
return array;
|
||||
|
||||
case TokenType.Null:
|
||||
return null;
|
||||
|
||||
case TokenType.Boolean:
|
||||
var boolean = token as BooleanToken;
|
||||
return new BooleanExpressionData(boolean.Value);
|
||||
|
||||
case TokenType.Number:
|
||||
var number = token as NumberToken;
|
||||
return new NumberExpressionData(number.Value);
|
||||
|
||||
case TokenType.String:
|
||||
var stringToken = token as StringToken;
|
||||
return new StringExpressionData(stringToken.Value);
|
||||
|
||||
default:
|
||||
throw new NotSupportedException($"Unexpected {nameof(TemplateToken)} type '{token.Type}'");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user