mirror of
https://github.com/actions/runner.git
synced 2025-12-15 06:26:46 +00:00
77 lines
2.9 KiB
C#
77 lines
2.9 KiB
C#
#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}'");
|
|
}
|
|
}
|
|
}
|
|
}
|