WebApi
PackageVersion.cs
using System;
using System.Globalization;
using System.Runtime.Serialization;
namespace GitHub.DistributedTask.WebApi
{
[DataContract]
public clast PackageVersion : IComparable, IEquatable
{
public PackageVersion()
{
}
public PackageVersion(String version)
{
Int32 major, minor, patch;
String semanticVersion;
VersionParser.ParseVersion(version, out major, out minor, out patch, out semanticVersion);
Major = major;
Minor = minor;
Patch = patch;
}
public static Boolean TryParse(String versionStr, out PackageVersion version)
{
version = null;
try
{
version = new PackageVersion(versionStr);
return true;
}
catch
{
return false;
}
}
private PackageVersion(PackageVersion versionToClone)
{
this.Major = versionToClone.Major;
this.Minor = versionToClone.Minor;
this.Patch = versionToClone.Patch;
}
[DataMember]
public Int32 Major
{
get;
set;
}
[DataMember]
public Int32 Minor
{
get;
set;
}
[DataMember]
public Int32 Patch
{
get;
set;
}
public PackageVersion Clone()
{
return new PackageVersion(this);
}
public static implicit operator String(PackageVersion version)
{
return version.ToString();
}
public override String ToString()
{
return String.Format(CultureInfo.InvariantCulture, "{0}.{1}.{2}", Major, Minor, Patch);
}
public override int GetHashCode()
{
return this.ToString().GetHashCode();
}
public Int32 CompareTo(PackageVersion other)
{
Int32 rc = Major.CompareTo(other.Major);
if (rc == 0)
{
rc = Minor.CompareTo(other.Minor);
if (rc == 0)
{
rc = Patch.CompareTo(other.Patch);
}
}
return rc;
}
public Boolean Equals(PackageVersion other)
{
return this.CompareTo(other) == 0;
}
}
}