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