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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
using System;
using System.Xml.Linq;
 
namespace OpenTap.Package
{
    internal class PackageSpecifierSerializerPlugin : TapSerializerPlugin
    {
        public override double Order => 5000; 
        public override bool Deserialize(XElement node, ITypeData t, Action<object> setter)
        {
            if (node.Name.LocalName == nameof(PackageSpecifier) && t is TypeData typeData && typeData.Type == (typeof(PackageSpecifier)))
            {
                string name = "";
                VersionSpecifier version = null;
                CpuArchitecture architecture = CpuArchitecture.Unspecified;
                string os = null;
 
                foreach (XAttribute attr in node.Attributes())
                {
                    switch (attr.Name.LocalName)
                    {
                        case "Version":
                            if (VersionSpecifier.TryParse(attr.Value, out var versionSpecifier))
                                version = versionSpecifier;
                            break;
                        case "Architecture":
                            architecture = (CpuArchitecture)Enum.Parse(typeof(CpuArchitecture), attr.Value);
                            break;
                        case "Name":
                            name = attr.Value;
                            break;
                        case "OS":
                            os = attr.Value;
                            break;
                    }
                }
 
                setter.Invoke(new PackageSpecifier(name, version ?? VersionSpecifier.Parse(""), architecture, os));
 
                return true;
            }
 
            return false;
        }
 
        public override bool Serialize(XElement node, object obj, ITypeData expectedType)
        {
            return false;
        }
    }
}