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.
55 lines
1.3 KiB
55 lines
1.3 KiB
namespace StabilityMatrix.Core.Models.FileInterfaces; |
|
|
|
public class FileSystemPath : IEquatable<FileSystemPath>, IEquatable<string> |
|
{ |
|
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; |
|
} |
|
|
|
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); |
|
}
|
|
|