module nl.netsoj.chris.blog.url; import std.exception; import vibe.inet.url; URL resolveURL(URL source, string other) { URL otherUrl = URL(other); if (otherUrl.schema.length > 0 || otherUrl.host.length > 0) { return otherUrl; } if (otherUrl.schema.length == 0) { enforce(source.schema.length > 0, "Source URL must have a scheme to resolve the other URL"); otherUrl.schema = source.schema; } if (otherUrl.host.length == 0) { otherUrl.host = source.host; otherUrl.port = source.port; if (!otherUrl.path.absolute) { otherUrl.path = source.path ~ otherUrl.path; } } return otherUrl; }