63 lines
1.3 KiB
C#
63 lines
1.3 KiB
C#
using Nebula.Shared.Utils;
|
|
|
|
namespace Nebula.Shared.Models;
|
|
|
|
public class RobustUrl
|
|
{
|
|
public RobustUrl(string url)
|
|
{
|
|
if (!UriHelper.TryParseSs14Uri(url, out var uri))
|
|
throw new Exception("Invalid scheme");
|
|
|
|
Uri = uri;
|
|
|
|
HttpUri = UriHelper.GetServerApiAddress(Uri);
|
|
}
|
|
|
|
public Uri Uri { get; }
|
|
public Uri HttpUri { get; }
|
|
public RobustPath InfoUri => new(this, "info");
|
|
public RobustPath StatusUri => new(this, "status");
|
|
|
|
public override string ToString()
|
|
{
|
|
return Uri.ToString();
|
|
}
|
|
|
|
public static implicit operator Uri(RobustUrl url)
|
|
{
|
|
return url.HttpUri;
|
|
}
|
|
|
|
public static explicit operator RobustUrl(string url)
|
|
{
|
|
return new RobustUrl(url);
|
|
}
|
|
|
|
public static explicit operator RobustUrl(Uri uri)
|
|
{
|
|
return new RobustUrl(uri.ToString());
|
|
}
|
|
}
|
|
|
|
public class RobustPath
|
|
{
|
|
public string Path;
|
|
public RobustUrl Url;
|
|
|
|
public RobustPath(RobustUrl url, string path)
|
|
{
|
|
Url = url;
|
|
Path = path;
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
return ((Uri)this).ToString();
|
|
}
|
|
|
|
public static implicit operator Uri(RobustPath path)
|
|
{
|
|
return new Uri(path.Url, path.Url.HttpUri.PathAndQuery + path.Path);
|
|
}
|
|
} |