Files
runner/src/Sdk/WorkflowParser/IStepJsonConverter.cs
2025-11-07 20:18:52 +00:00

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();
}
}
}