using System;
using System.Text.Json;
using System.Text.Json.Serialization;
namespace Terminal.Gui {
///
/// Implements a JSON converter for .
///
public class ColorSchemeJsonConverter : JsonConverter {
private static ColorSchemeJsonConverter instance;
///
/// Singleton
///
public static ColorSchemeJsonConverter Instance {
get {
if (instance == null) {
instance = new ColorSchemeJsonConverter ();
}
return instance;
}
}
///
public override ColorScheme Read (ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
if (reader.TokenType != JsonTokenType.StartObject) {
throw new JsonException ($"Unexpected StartObject token when parsing ColorScheme: {reader.TokenType}.");
}
var colorScheme = new ColorScheme ();
while (reader.Read ()) {
if (reader.TokenType == JsonTokenType.EndObject) {
return colorScheme;
}
if (reader.TokenType != JsonTokenType.PropertyName) {
throw new JsonException ($"Unexpected token when parsing Attribute: {reader.TokenType}.");
}
var propertyName = reader.GetString ();
reader.Read ();
var attribute = JsonSerializer.Deserialize (ref reader, options);
switch (propertyName.ToLower()) {
case "normal":
colorScheme.Normal = attribute;
break;
case "focus":
colorScheme.Focus = attribute;
break;
case "hotnormal":
colorScheme.HotNormal = attribute;
break;
case "hotfocus":
colorScheme.HotFocus = attribute;
break;
case "disabled":
colorScheme.Disabled = attribute;
break;
default:
throw new JsonException ($"Unrecognized ColorScheme Attribute name: {propertyName}.");
}
}
throw new JsonException ();
}
///
public override void Write (Utf8JsonWriter writer, ColorScheme value, JsonSerializerOptions options)
{
writer.WriteStartObject ();
writer.WritePropertyName ("Normal");
AttributeJsonConverter.Instance.Write (writer, value.Normal, options);
writer.WritePropertyName ("Focus");
AttributeJsonConverter.Instance.Write (writer, value.Focus, options);
writer.WritePropertyName ("HotNormal");
AttributeJsonConverter.Instance.Write (writer, value.HotNormal, options);
writer.WritePropertyName ("HotFocus");
AttributeJsonConverter.Instance.Write (writer, value.HotFocus, options);
writer.WritePropertyName ("Disabled");
AttributeJsonConverter.Instance.Write (writer, value.Disabled, options);
writer.WriteEndObject ();
}
}
}