tools/code/common/Common.cs (47 lines of code) (raw):
using System;
using System.IO;
namespace common;
public abstract record NonEmptyString
{
protected NonEmptyString(string value)
{
ArgumentException.ThrowIfNullOrWhiteSpace(value, nameof(value));
Value = value;
}
public string Value { get; }
public sealed override string ToString() => Value;
}
public abstract record ResourceName : NonEmptyString
{
protected ResourceName(string value) : base(value) { }
public virtual bool Equals(ResourceName? other) => string.Equals(Value, other?.Value, StringComparison.OrdinalIgnoreCase);
public override int GetHashCode() => Value.GetHashCode(StringComparison.OrdinalIgnoreCase);
}
public interface IResourceName<T>
{
public abstract static T From(string value);
}
public abstract record ResourceDirectory
{
protected abstract DirectoryInfo Value { get; }
public sealed override string ToString() => Value.FullName;
public DirectoryInfo ToDirectoryInfo() => Value;
public virtual bool Equals(ResourceDirectory? other) => Value.FullName.Equals(other?.Value.FullName, StringComparison.Ordinal);
public override int GetHashCode() => Value.FullName.GetHashCode(StringComparison.Ordinal);
}
public abstract record ResourceFile
{
protected abstract FileInfo Value { get; }
public sealed override string ToString() => Value.FullName;
public FileInfo ToFileInfo() => Value;
public virtual bool Equals(ResourceFile? other) => Value.FullName.Equals(other?.Value.FullName, StringComparison.Ordinal);
public override int GetHashCode() => Value.FullName.GetHashCode(StringComparison.Ordinal);
}
public abstract record ResourceUri
{
protected abstract Uri Value { get; }
public sealed override string ToString() => Value.ToString();
public Uri ToUri() => Value;
public virtual bool Equals(ResourceUri? other) => Value.Equals(other?.Value);
public override int GetHashCode() => Value.GetHashCode();
}