1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- using System;
- using System.Text.Json;
- using System.Text.Json.Serialization;
- using Terminal.Gui;
- namespace Terminal.Gui {
- /// <summary>
- /// Json converter fro the <see cref="Attribute"/> class.
- /// </summary>
- public class AttributeJsonConverter : JsonConverter<Attribute> {
- private static AttributeJsonConverter instance;
- /// <summary>
- ///
- /// </summary>
- public static AttributeJsonConverter Instance {
- get {
- if (instance == null) {
- instance = new AttributeJsonConverter ();
- }
- return instance;
- }
- }
- /// <inheritdoc/>
- public override Attribute Read (ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
- {
- if (reader.TokenType != JsonTokenType.StartObject) {
- throw new JsonException ($"Unexpected StartObject token when parsing Attribute: {reader.TokenType}.");
- }
- Attribute attribute = new Attribute ();
- Color foreground = (Color)(-1);
- Color background = (Color)(-1);
- while (reader.Read ()) {
- if (reader.TokenType == JsonTokenType.EndObject) {
- if (foreground == (Color)(-1) || background == (Color)(-1)) {
- throw new JsonException ($"Both Foreground and Background colors must be provided.");
- }
- return attribute;
- }
- if (reader.TokenType != JsonTokenType.PropertyName) {
- throw new JsonException ($"Unexpected token when parsing Attribute: {reader.TokenType}.");
- }
- string propertyName = reader.GetString ();
- reader.Read ();
- string color = $"\"{reader.GetString ()}\"";
- switch (propertyName.ToLower ()) {
- case "foreground":
- foreground = JsonSerializer.Deserialize<Color> (color, options);
- break;
- case "background":
- background = JsonSerializer.Deserialize<Color> (color, options);
- break;
- //case "Bright":
- // attribute.Bright = reader.GetBoolean ();
- // break;
- //case "Underline":
- // attribute.Underline = reader.GetBoolean ();
- // break;
- //case "Reverse":
- // attribute.Reverse = reader.GetBoolean ();
- // break;
- default:
- throw new JsonException ($"Unknown Attribute property {propertyName}.");
- }
- attribute = new Attribute (foreground, background);
- }
- throw new JsonException ();
- }
- /// <inheritdoc/>
- public override void Write (Utf8JsonWriter writer, Attribute value, JsonSerializerOptions options)
- {
- writer.WriteStartObject ();
- writer.WritePropertyName ("Foreground");
- ColorJsonConverter.Instance.Write (writer, value.Foreground, options);
- writer.WritePropertyName ("Background");
- ColorJsonConverter.Instance.Write (writer, value.Background, options);
- writer.WriteEndObject ();
- }
- }
- }
|