// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System; using System.Runtime.Serialization; using System.Xml.Linq; using Roslyn.Utilities; namespace Microsoft.CodeAnalysis.Diagnostics.Analyzers.NamingStyles; [DataContract] internal sealed record class SerializableNamingRule { [DataMember(Order = 0)] public Guid SymbolSpecificationID { get; init; } [DataMember(Order = 1)] public Guid NamingStyleID { get; init; } [DataMember(Order = 2)] public ReportDiagnostic EnforcementLevel { get; init; } internal XElement CreateXElement() { var element = new XElement(nameof(SerializableNamingRule), new XAttribute(nameof(SymbolSpecificationID), SymbolSpecificationID), new XAttribute(nameof(NamingStyleID), NamingStyleID), new XAttribute(nameof(EnforcementLevel), EnforcementLevel.ToDiagnosticSeverity() ?? DiagnosticSeverity.Hidden)); return element; } internal static SerializableNamingRule FromXElement(XElement namingRuleElement) { return new SerializableNamingRule() { EnforcementLevel = ((DiagnosticSeverity)Enum.Parse(typeof(DiagnosticSeverity), namingRuleElement.Attribute(nameof(EnforcementLevel))!.Value)).ToReportDiagnostic(), NamingStyleID = Guid.Parse(namingRuleElement.Attribute(nameof(NamingStyleID))!.Value), SymbolSpecificationID = Guid.Parse(namingRuleElement.Attribute(nameof(SymbolSpecificationID))!.Value) }; } public void WriteTo(ObjectWriter writer) { writer.WriteGuid(SymbolSpecificationID); writer.WriteGuid(NamingStyleID); writer.WriteInt32((int)(EnforcementLevel.ToDiagnosticSeverity() ?? DiagnosticSeverity.Hidden)); } public static SerializableNamingRule ReadFrom(ObjectReader reader) { return new SerializableNamingRule { SymbolSpecificationID = reader.ReadGuid(), NamingStyleID = reader.ReadGuid(), EnforcementLevel = ((DiagnosticSeverity)reader.ReadInt32()).ToReportDiagnostic(), }; } } |