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.
 
 
 

57 lines
1.7 KiB

using System;
using System.Text.Json;
using System.Text.Json.Nodes;
using System.Text.Json.Serialization;
using StabilityMatrix.Avalonia.ViewModels.Inference;
namespace StabilityMatrix.Avalonia.Models;
/// <summary>
/// This is the project file for inference tabs
/// </summary>
[JsonSerializable(typeof(InferenceProjectDocument))]
public class InferenceProjectDocument
{
[JsonIgnore]
private static readonly JsonSerializerOptions SerializerOptions = new()
{
IgnoreReadOnlyProperties = true,
WriteIndented = true,
};
public int Version { get; set; } = 1;
[JsonConverter(typeof(JsonStringEnumConverter))]
public InferenceProjectType ProjectType { get; set; }
public JsonObject? State { get; set; }
public static InferenceProjectDocument FromLoadable(object loadableModel)
{
var document = new InferenceProjectDocument();
if (loadableModel is InferenceTextToImageViewModel model)
{
document.ProjectType = InferenceProjectType.TextToImage;
document.State = JsonSerializer.SerializeToNode(model.SaveState(), SerializerOptions)?.AsObject();
}
else
{
throw new InvalidOperationException(
$"Unknown loadable model type: {loadableModel.GetType()}"
);
}
return document;
}
public Type GetViewModelType()
{
return ProjectType switch
{
InferenceProjectType.TextToImage => typeof(InferenceTextToImageViewModel),
InferenceProjectType.Unknown => throw new InvalidOperationException(),
_ => throw new ArgumentOutOfRangeException(nameof(ProjectType), ProjectType, null)
};
}
}