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 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; } } }