mirror of
https://github.com/actions/runner.git
synced 2025-12-15 06:26:46 +00:00
65 lines
2.3 KiB
C#
65 lines
2.3 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
using Newtonsoft.Json.Linq;
|
|
|
|
namespace GitHub.DistributedTask.Pipelines.ContextData
|
|
{
|
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
|
public static class JTokenExtensions
|
|
{
|
|
public static PipelineContextData ToPipelineContextData(this JToken value)
|
|
{
|
|
return value.ToPipelineContextData(1, 100);
|
|
}
|
|
|
|
public static PipelineContextData ToPipelineContextData(
|
|
this JToken value,
|
|
Int32 depth,
|
|
Int32 maxDepth)
|
|
{
|
|
if (depth < maxDepth)
|
|
{
|
|
if (value.Type == JTokenType.String)
|
|
{
|
|
return new StringContextData((String)value);
|
|
}
|
|
else if (value.Type == JTokenType.Boolean)
|
|
{
|
|
return new BooleanContextData((Boolean)value);
|
|
}
|
|
else if (value.Type == JTokenType.Float || value.Type == JTokenType.Integer)
|
|
{
|
|
return new NumberContextData((Double)value);
|
|
}
|
|
else if (value.Type == JTokenType.Object)
|
|
{
|
|
var subContext = new DictionaryContextData();
|
|
var obj = (JObject)value;
|
|
foreach (var property in obj.Properties())
|
|
{
|
|
subContext[property.Name] = ToPipelineContextData(property.Value, depth + 1, maxDepth);
|
|
}
|
|
return subContext;
|
|
}
|
|
else if (value.Type == JTokenType.Array)
|
|
{
|
|
var arrayContext = new ArrayContextData();
|
|
var arr = (JArray)value;
|
|
foreach (var element in arr)
|
|
{
|
|
arrayContext.Add(ToPipelineContextData(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 StringContextData(value.ToString());
|
|
}
|
|
}
|
|
}
|