Multi-Platform Package Manager for Stable Diffusion
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
1.8 KiB

namespace StabilityMatrix.Core.Models.FileInterfaces;
public class FileSystemPath : IEquatable<FileSystemPath>, IEquatable<string>, IFormattable
{
public string FullPath { get; }
protected FileSystemPath(string path)
{
FullPath = path;
}
protected FileSystemPath(FileSystemPath path)
: this(path.FullPath) { }
protected FileSystemPath(params string[] paths)
: this(Path.Combine(paths)) { }
public override string ToString()
{
return FullPath;
}
/// <inheritdoc />
string IFormattable.ToString(string? format, IFormatProvider? formatProvider)
{
return ToString(format, formatProvider);
}
/// <summary>
/// Overridable IFormattable.ToString method.
/// By default, returns <see cref="FullPath"/>.
/// </summary>
protected virtual string ToString(string? format, IFormatProvider? formatProvider)
{
return FullPath;
}
public bool Equals(FileSystemPath? other)
{
if (ReferenceEquals(null, other))
return false;
if (ReferenceEquals(this, other))
return true;
return FullPath == other.FullPath;
}
public bool Equals(string? other)
{
return string.Equals(FullPath, other);
}
public override bool Equals(object? obj)
{
return obj switch
{
FileSystemPath path => Equals(path),
string path => Equals(path),
_ => false
};
}
public override int GetHashCode()
{
return FullPath.GetHashCode();
}
// Implicit conversions to and from string
public static implicit operator string(FileSystemPath path) => path.FullPath;
public static implicit operator FileSystemPath(string path) => new(path);
}