mirror of
https://github.com/actions/runner.git
synced 2025-12-16 23:20:03 +00:00
71 lines
1.9 KiB
C#
71 lines
1.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 System.Reflection;
|
|
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Linq;
|
|
|
|
namespace GitHub.Actions.WorkflowParser
|
|
{
|
|
internal sealed class IStepJsonConverter : JsonConverter
|
|
{
|
|
public override Boolean CanWrite
|
|
{
|
|
get
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public override Boolean CanConvert(Type objectType)
|
|
{
|
|
return typeof(IStep).GetTypeInfo().IsAssignableFrom(objectType.GetTypeInfo());
|
|
}
|
|
|
|
public override Object ReadJson(
|
|
JsonReader reader,
|
|
Type objectType,
|
|
Object existingValue,
|
|
JsonSerializer serializer)
|
|
{
|
|
if (reader.TokenType != JsonToken.StartObject)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
JObject value = JObject.Load(reader);
|
|
Object newValue = null;
|
|
|
|
if (value.TryGetValue("Uses", StringComparison.OrdinalIgnoreCase, out _))
|
|
{
|
|
newValue = new ActionStep();
|
|
}
|
|
else if (value.TryGetValue("Run", StringComparison.OrdinalIgnoreCase, out _))
|
|
{
|
|
newValue = new RunStep();
|
|
}
|
|
else
|
|
{
|
|
return existingValue;
|
|
}
|
|
|
|
|
|
if (value != null)
|
|
{
|
|
using JsonReader objectReader = value.CreateReader();
|
|
serializer.Populate(objectReader, newValue);
|
|
}
|
|
|
|
return newValue;
|
|
}
|
|
|
|
public override void WriteJson(
|
|
JsonWriter writer,
|
|
Object value,
|
|
JsonSerializer serializer)
|
|
{
|
|
throw new NotImplementedException();
|
|
}
|
|
}
|
|
}
|