using System; using System.Text.Json; using System.Text.Json.Serialization; using Avalonia.Controls; using Avalonia.Media; namespace SourceGit { public class ColorConverter : JsonConverter { public override Color Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { return Color.Parse(reader.GetString()); } public override void Write(Utf8JsonWriter writer, Color value, JsonSerializerOptions options) { writer.WriteStringValue(value.ToString()); } } public class FontFamilyConverter : JsonConverter { public override FontFamily Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { var name = reader.GetString(); return new FontFamily(name); } public override void Write(Utf8JsonWriter writer, FontFamily value, JsonSerializerOptions options) { writer.WriteStringValue(value.ToString()); } } public class GridLengthConverter : JsonConverter { public override GridLength Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { var size = reader.GetDouble(); return new GridLength(size, GridUnitType.Pixel); } public override void Write(Utf8JsonWriter writer, GridLength value, JsonSerializerOptions options) { writer.WriteNumberValue(value.Value); } } [JsonSourceGenerationOptions( WriteIndented = true, IgnoreReadOnlyFields = true, IgnoreReadOnlyProperties = true, Converters = [ typeof(ColorConverter), typeof(FontFamilyConverter), typeof(GridLengthConverter), ] )] [JsonSerializable(typeof(Models.InteractiveRebaseJobCollection))] [JsonSerializable(typeof(Models.JetBrainsState))] [JsonSerializable(typeof(Models.ThemeOverrides))] [JsonSerializable(typeof(Models.Version))] [JsonSerializable(typeof(ViewModels.Preference))] [JsonSerializable(typeof(ViewModels.RepositorySettings))] internal partial class JsonCodeGen : JsonSerializerContext { } }