25#include "../abi/string.hpp"
26#include "../compat.hpp"
34#include <initializer_list>
39namespace essence::net {
45 static constexpr std::size_t value_size = 16;
46 static constexpr std::size_t value_group_count = value_size / 2;
55 using value_type = std::array<std::uint8_t, value_size>;
56 using zone_id_type = std::array<char, max_zone_id_size>;
69 constexpr ipv6_address(std::initializer_list<std::uint8_t> address, std::string_view
zone_id =
"") noexcept
71 std::span<const std::uint8_t, value_size>{address.begin(), std::min(address.size(), value_size)},
80 std::span<const std::uint8_t, value_size> address, std::string_view
zone_id =
"") noexcept
82 std::ranges::copy(address, value_.begin());
86 constexpr auto operator<=>(
const ipv6_address&)
const noexcept =
default;
92 [[nodiscard]]
constexpr value_type&
get() noexcept {
100 [[nodiscard]]
constexpr const value_type&
get() const noexcept {
108 [[nodiscard]]
constexpr const char*
zone_id() const noexcept {
109 return zone_id_.data();
117 zone_id.copy(zone_id_.data(), std::min(zone_id_.size(),
zone_id.size()));
122 zone_id_type zone_id_;
130 ES_API(CPPESSENCE) std::optional<ipv6_address> parse_ipv6_address(std::string_view str);
138 template <std::same_as<ipv6_address> T>
139 std::optional<T> from_string(std::string_view str) {
140 return parse_ipv6_address(str);
148 ES_API(CPPESSENCE) abi::string to_string(
const ipv6_address& address);
Represents an IPv6 address.
Definition ipv6_address.hpp:43
constexpr const char * zone_id() const noexcept
Gets the zone ID.
Definition ipv6_address.hpp:108
constexpr ipv6_address(std::span< const std::uint8_t, value_size > address, std::string_view zone_id="") noexcept
Creates an instance from a 16-byte array.
Definition ipv6_address.hpp:79
constexpr const value_type & get() const noexcept
Gets the underlying array.
Definition ipv6_address.hpp:100
constexpr value_type & get() noexcept
Gets the underlying array.
Definition ipv6_address.hpp:92
static constexpr std::size_t max_zone_id_size
On linux systems, the length of a stringified zone ID must be not longer than 16 bytes including the ...
Definition ipv6_address.hpp:53
constexpr ipv6_address(std::initializer_list< std::uint8_t > address, std::string_view zone_id="") noexcept
Creates an instance from an initializer list.
Definition ipv6_address.hpp:69
constexpr void set_zone_id(std::string_view zone_id) noexcept
Sets the zone ID.
Definition ipv6_address.hpp:116
constexpr ipv6_address() noexcept
Creates an instance.
Definition ipv6_address.hpp:61