132 lines
4.1 KiB
C#
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}'";
|
|
}
|
|
}
|