public static function fromParts(
            string $scheme,
            string $host,
            int $port = null,
            string $path = '/',
            string $queryString = null
    ): self {
        return self::fromString(
                $scheme
                . '://'
                . $host
                . (null === $port ? '' : ':' . $port)
                . $path
                . ((null !== $queryString) ? (substr($queryString, 0, 1) !== '?' ? '?' . $queryString : $queryString) : $queryString)
        );
    }