chr
2026-04-05 fe750b791d5b517cc4e9bc8e99a9a75139a0cfba
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
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
 
namespace OpenTap.Package
{
    internal class JsonPackageSpecifierConverter : JsonConverter
    {
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
 
        }
 
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            var jObject = JObject.Load(reader);
 
            if (jObject["Name"] is null)
                throw new InvalidOperationException("Package name cannot be null!");
 
            string name = jObject["Name"].Value<string>();
            VersionSpecifier version = jObject["Version"] == null ? VersionSpecifier.Parse("") : VersionSpecifier.Parse(jObject["Version"].Value<string>());
            CpuArchitecture architecture = string.IsNullOrEmpty(jObject["Architecture"]?.ToString()) ? CpuArchitecture.Unspecified : (CpuArchitecture)Enum.Parse(typeof(CpuArchitecture), jObject["Architecture"].Value<string>());
            string os = jObject["OS"] == null ? null : jObject["OS"].Value<string>();
 
            return new PackageSpecifier(name, version, architecture, os);
        }
 
        public override bool CanConvert(Type objectType)
        {
            return objectType == typeof(PackageSpecifier);
        }
    }
}