File: LSPAnyConverter.cs

package info (click to toggle)
lsprotocol 2025.0.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,408 kB
  • sloc: python: 7,567; cs: 1,225; sh: 15; makefile: 4
file content (61 lines) | stat: -rw-r--r-- 1,947 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
using Newtonsoft.Json;

public class LSPAnyConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(LSPAny);
    }

    public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer)
    {
        reader = reader ?? throw new ArgumentNullException(nameof(reader));
        switch (reader.TokenType)
        {
            case JsonToken.Null:
                return null;

            case JsonToken.Integer:
                return new LSPAny(serializer.Deserialize<long>(reader));

            case JsonToken.Float:
                return new LSPAny(serializer.Deserialize<float>(reader));

            case JsonToken.Boolean:
                return new LSPAny(serializer.Deserialize<bool>(reader));

            case JsonToken.String:
                return new LSPAny(serializer.Deserialize<string>(reader));

            case JsonToken.StartArray:
                List<object>? l = serializer.Deserialize<List<object>>(reader);
                if (l == null)
                {
                    return null;
                }
                return new LSPAny(new LSPArray(l));

            case JsonToken.StartObject:
                Dictionary<string, object?>? o = serializer.Deserialize<Dictionary<string, object?>>(reader);
                if (o == null)
                {
                    return null;
                }
                return new LSPAny(new LSPObject(o));
        }

        throw new JsonSerializationException($"Unexpected token type '{reader.TokenType}' while deserializing '{objectType.Name}'.");
    }

    public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
    {
        if (value is null)
        {
            writer.WriteNull();
        }
        else
        {
            serializer.Serialize(writer, ((LSPAny)value).Value);
        }
    }
}