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 self($scheme, $user, $pass, $domain, $portNumber, $path, $query, $fragment);
    }