| File: ApiContract.cs | Web Access |
| Project: src\msbuild\src\Utilities\Microsoft.Build.Utilities.csproj (Microsoft.Build.Utilities.Core) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Collections.Generic; using System.Xml; namespace Microsoft.Build.Utilities { /// <summary> /// Represents an API contract definition /// </summary> internal struct ApiContract { /// <summary> /// Name of the contract /// </summary> internal string Name; /// <summary> /// Version of the contract /// </summary> internal string Version; /// <summary> /// Constructor. /// </summary> private ApiContract(string name, string version) { Name = name; Version = version; } /// <summary> /// Returns true if this element is a "ContainedApiContracts" element. /// </summary> internal static bool IsContainedApiContractsElement(string elementName) => string.Equals(elementName, Elements.ContainedApiContracts, StringComparison.Ordinal); internal static bool IsVersionedContentElement(string elementName) => string.Equals(elementName, Elements.VersionedContent, StringComparison.Ordinal); /// <summary> /// Given an XML element containing API contracts, read out all contracts within that element. /// </summary> internal static void ReadContractsElement(XmlElement element, ICollection<ApiContract> apiContracts) { if (element != null && IsContainedApiContractsElement(element.Name)) { // <ContainedApiContracts> // <ApiContract name="UAP" version="1.0.0.0" /> // </ContainedApiContracts> foreach (XmlNode contractNode in element.ChildNodes) { if (contractNode is XmlElement contractElement && string.Equals(contractNode.Name, Elements.ApiContract, StringComparison.Ordinal)) { apiContracts.Add(new ApiContract( contractElement.GetAttribute(Attributes.Name), contractElement.GetAttribute(Attributes.Version))); } } } } /// <summary> /// Helper class with ApiContract element names /// </summary> private static class Elements { /// <summary> /// Element containing a bucket of contracts /// </summary> public const string ContainedApiContracts = "ContainedApiContracts"; /// <summary> /// Element representing an individual API contract /// </summary> public const string ApiContract = "ApiContract"; /// <summary> /// Element representing a flag to indicate if the SDK content is versioned /// </summary> public const string VersionedContent = "VersionedContent"; } /// <summary> /// Helper class with attribute names /// </summary> private static class Attributes { /// <summary> /// Name associated with this element /// </summary> public const string Name = "name"; /// <summary> /// Version associated with this element /// </summary> public const string Version = "version"; } } }