aspnetcore/src/Microsoft.AspNetCore.Razor..../RazorLanguageVersion.cs

132 lines
4.1 KiB
C#

// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Diagnostics;
namespace Microsoft.AspNetCore.Razor.Language
{
[DebuggerDisplay("{" + nameof(DebuggerToString) + "(),nq}")]
public sealed class RazorLanguageVersion : IEquatable<RazorLanguageVersion>, IComparable<RazorLanguageVersion>
{
public static readonly RazorLanguageVersion Version_1_0 = new RazorLanguageVersion(1, 0);
public static readonly RazorLanguageVersion Version_1_1 = new RazorLanguageVersion(1, 1);
public static readonly RazorLanguageVersion Version_2_0 = new RazorLanguageVersion(2, 0);
public static readonly RazorLanguageVersion Version_2_1 = new RazorLanguageVersion(2, 1);
public static readonly RazorLanguageVersion Latest = Version_2_1;
public static readonly RazorLanguageVersion Experimental = new RazorLanguageVersion(1337, 1337);
public static bool TryParse(string languageVersion, out RazorLanguageVersion version)
{
if (languageVersion == null)
{
throw new ArgumentNullException(nameof(languageVersion));
}
if (string.Equals(languageVersion, "latest", StringComparison.OrdinalIgnoreCase))
{
version = Version_2_1;
return true;
}
else if (string.Equals(languageVersion, "experimental", StringComparison.OrdinalIgnoreCase))
{
version = Experimental;
return true;
}
else if (languageVersion == "2.1")
{
version = Version_2_1;
return true;
}
else if (languageVersion == "2.0")
{
version = Version_2_0;
return true;
}
else if (languageVersion == "1.1")
{
version = Version_1_1;
return true;
}
else if (languageVersion == "1.0")
{
version = Version_1_0;
return true;
}
version = null;
return false;
}
public static RazorLanguageVersion Parse(string languageVersion)
{
if (languageVersion == null)
{
throw new ArgumentNullException(nameof(languageVersion));
}
if (TryParse(languageVersion, out var parsed))
{
return parsed;
}
throw new ArgumentException(
Resources.FormatRazorLanguageVersion_InvalidVersion(languageVersion),
nameof(languageVersion));
}
// Don't want anyone else constructing language versions.
private RazorLanguageVersion(int major, int minor)
{
Major = major;
Minor = minor;
}
public int Major { get; }
public int Minor { get; }
public int CompareTo(RazorLanguageVersion other)
{
if (other == null)
{
throw new ArgumentNullException(nameof(other));
}
var result = Major.CompareTo(other.Major);
if (result != 0)
{
return result;
}
return Minor.CompareTo(other.Minor);
}
public bool Equals(RazorLanguageVersion other)
{
if (other == null)
{
return false;
}
// We're the only one who can create RazorLanguageVersions so reference equality is sufficient.
return ReferenceEquals(this, other);
}
public override int GetHashCode()
{
// We don't need to do anything special for our hash code since reference equality is what we're going for.
return base.GetHashCode();
}
public override string ToString() => $"{Major}.{Minor}";
private string DebuggerToString() => $"Razor '{Major}.{Minor}'";
}
}