mirror of
https://github.com/actions/runner.git
synced 2025-12-10 12:36:23 +00:00
65 lines
2.3 KiB
C#
65 lines
2.3 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 Newtonsoft.Json.Linq;
|
|
|
|
namespace GitHub.Actions.Expressions.Data
|
|
{
|
|
public static class JTokenExtensions
|
|
{
|
|
public static ExpressionData ToExpressionData(this JToken value)
|
|
{
|
|
return value.ToExpressionData(1, 100);
|
|
}
|
|
|
|
public static ExpressionData ToExpressionData(
|
|
this JToken value,
|
|
Int32 depth,
|
|
Int32 maxDepth)
|
|
{
|
|
if (depth < maxDepth)
|
|
{
|
|
if (value.Type == JTokenType.String)
|
|
{
|
|
return new StringExpressionData((String)value);
|
|
}
|
|
else if (value.Type == JTokenType.Boolean)
|
|
{
|
|
return new BooleanExpressionData((Boolean)value);
|
|
}
|
|
else if (value.Type == JTokenType.Float || value.Type == JTokenType.Integer)
|
|
{
|
|
return new NumberExpressionData((Double)value);
|
|
}
|
|
else if (value.Type == JTokenType.Object)
|
|
{
|
|
var subContext = new DictionaryExpressionData();
|
|
var obj = (JObject)value;
|
|
foreach (var property in obj.Properties())
|
|
{
|
|
subContext[property.Name] = ToExpressionData(property.Value, depth + 1, maxDepth);
|
|
}
|
|
return subContext;
|
|
}
|
|
else if (value.Type == JTokenType.Array)
|
|
{
|
|
var arrayContext = new ArrayExpressionData();
|
|
var arr = (JArray)value;
|
|
foreach (var element in arr)
|
|
{
|
|
arrayContext.Add(ToExpressionData(element, depth + 1, maxDepth));
|
|
}
|
|
return arrayContext;
|
|
}
|
|
else if (value.Type == JTokenType.Null)
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
|
|
// We don't understand the type or have reached our max, return as string
|
|
return new StringExpressionData(value.ToString());
|
|
}
|
|
}
|
|
}
|