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.
71 lines
1.8 KiB
71 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); |
|
}
|
|
|