Multi-Platform Package Manager for Stable Diffusion
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
1.6 KiB

using System.Reflection;
using System.Text.Json;
using System.Text.Json.Serialization;
using StabilityMatrix.Core.Models.Api.Comfy.NodeTypes;
namespace StabilityMatrix.Core.Converters.Json;
public class NodeConnectionBaseJsonConverter : JsonConverter<NodeConnectionBase>
{
/// <inheritdoc />
public override NodeConnectionBase Read(
ref Utf8JsonReader reader,
Type typeToConvert,
JsonSerializerOptions options
)
{
// Read as Data array
reader.Read();
var data = new object[2];
reader.Read();
data[0] = reader.GetString() ?? throw new JsonException("Expected string for node name");
reader.Read();
data[1] = reader.GetInt32();
reader.Read();
if (Activator.CreateInstance(typeToConvert) is not NodeConnectionBase instance)
{
throw new JsonException($"Failed to create instance of {typeToConvert}");
}
var propertyInfo =
typeToConvert.GetProperty("Data", BindingFlags.Public | BindingFlags.Instance)
?? throw new JsonException($"Failed to get Data property of {typeToConvert}");
propertyInfo.SetValue(instance, data);
return instance;
}
/// <inheritdoc />
public override void Write(Utf8JsonWriter writer, NodeConnectionBase value, JsonSerializerOptions options)
{
// Write as Data array
writer.WriteStartArray();
writer.WriteStringValue(value.Data?[0] as string);
writer.WriteNumberValue((int)value.Data?[1]!);
writer.WriteEndArray();
}
}