10#include <botan/dns_name.h>
11#include <botan/ipv4_address.h>
12#include <botan/ipv6_address.h>
13#include <botan/types.h>
36 using Host = std::variant<DNSName, IPv4Address, IPv6Address>;
51 static std::optional<Authority>
from_string(std::string_view raw);
69 std::string host_to_string()
const;
74 std::optional<uint16_t>
port()
const {
return m_port; }
87 const std::optional<std::string>&
userinfo()
const {
return m_userinfo; }
104 Authority(std::string raw, std::optional<std::string> userinfo,
Host host, std::optional<uint16_t> port) :
105 m_raw(std::move(raw)), m_userinfo(std::move(userinfo)), m_host(std::move(
host)), m_port(port) {}
108 std::optional<std::string> m_userinfo;
110 std::optional<uint16_t> m_port;
122 static std::optional<URI>
from_string(std::string_view raw);
127 const std::string&
scheme()
const {
return m_scheme; }
132 const std::optional<Authority>&
authority()
const {
return m_authority; }
138 std::optional<std::string_view> raw_authority()
const;
144 std::optional<std::reference_wrapper<const Host>>
host()
const {
145 return m_authority.has_value() ? std::optional<std::reference_wrapper<const Host>>(m_authority->host())
154 const std::string&
path()
const {
return m_path; }
161 const std::optional<std::string>&
query()
const {
return m_query; }
168 const std::optional<std::string>&
fragment()
const {
return m_fragment; }
193 static std::vector<URI> filter_scheme(std::string_view scheme, std::span<const URI> uris);
198 std::optional<Authority> authority,
200 std::optional<std::string> query,
201 std::optional<std::string> fragment) :
202 m_raw(std::move(raw)),
203 m_scheme(std::move(scheme)),
204 m_authority(std::move(authority)),
205 m_path(std::move(path)),
206 m_query(std::move(query)),
207 m_fragment(std::move(fragment)) {}
210 std::string m_scheme;
211 std::optional<Authority> m_authority;
213 std::optional<std::string> m_query;
214 std::optional<std::string> m_fragment;
#define BOTAN_PUBLIC_API(maj, min)
const std::optional< std::string > & userinfo() const
const Host & host() const
std::optional< uint16_t > port() const
std::variant< DNSName, IPv4Address, IPv6Address > Host
const std::string & original_input() const
const std::optional< std::string > & fragment() const
static std::optional< URI > from_string(std::string_view raw)
const std::string & scheme() const
std::optional< std::reference_wrapper< const Host > > host() const
std::strong_ordering operator<=>(const URI &other) const
const std::optional< std::string > & query() const
Authority::HostKind HostKind
Tag for the alternative held by Host.
const std::string & original_input() const
const std::optional< Authority > & authority() const
bool operator==(const URI &other) const
Authority::Host Host
A validated DNS name, or a literal IPv4 or IPv6 address.
const std::string & path() const
auto operator<=>(const Strong< T, Tags... > &lhs, const Strong< T, Tags... > &rhs)
bool operator==(const AlgorithmIdentifier &x, const AlgorithmIdentifier &y)