public static function fromNative()
{
$urlString = \func_get_arg(0);
$user = \parse_url($urlString, PHP_URL_USER);
$pass = \parse_url($urlString, PHP_URL_PASS);
$host = \parse_url($urlString, PHP_URL_HOST);
$queryString = \parse_url($urlString, PHP_URL_QUERY);
$fragmentId = \parse_url($urlString, PHP_URL_FRAGMENT);
$port = \parse_url($urlString, PHP_URL_PORT);
$scheme = new SchemeName(\parse_url($urlString, PHP_URL_SCHEME));
$user = $user ? new StringLiteral($user) : new StringLiteral('');
$pass = $pass ? new StringLiteral($pass) : new StringLiteral('');
$domain = Domain::specifyType($host);
$path = new Path(\parse_url($urlString, PHP_URL_PATH));
$portNumber = $port ? new PortNumber($port) : new NullPortNumber();
$query = $queryString ? new QueryString(\sprintf('?%s', $queryString)) : new NullQueryString();
$fragment = $fragmentId ? new FragmentIdentifier(\sprintf('#%s', $fragmentId)) : new NullFragmentIdentifier();
return new static($scheme, $user, $pass, $domain, $portNumber, $path, $query, $fragment);
}