ipv6_addrz_rule.hpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. //
  2. // Copyright (c) 2023 Alan de Freitas (alandefreitas@gmail.com)
  3. //
  4. // Distributed under the Boost Software License, Version 1.0. (See accompanying
  5. // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  6. //
  7. // Official repository: https://github.com/boostorg/url
  8. //
  9. #ifndef BOOST_URL_RFC_DETAIL_IPV6ADDRZ_RULE_HPP
  10. #define BOOST_URL_RFC_DETAIL_IPV6ADDRZ_RULE_HPP
  11. #include <boost/url/error_types.hpp>
  12. #include <boost/url/ipv6_address.hpp>
  13. #include <boost/url/pct_string_view.hpp>
  14. #include <boost/core/detail/string_view.hpp>
  15. namespace boost {
  16. namespace urls {
  17. namespace detail {
  18. /** Rule for IPvFuture
  19. @par BNF
  20. @code
  21. IPv6addrz = IPv6address "%25" ZoneID
  22. ZoneID = 1*( unreserved / pct-encoded )
  23. @endcode
  24. @par Specification
  25. @li <a href="https://datatracker.ietf.org/doc/html/rfc3986#section-3.2.2"
  26. >3.2.2. Host (rfc3986)</a>
  27. */
  28. struct ipv6_addrz_rule_t
  29. {
  30. struct value_type
  31. {
  32. ipv6_address ipv6;
  33. pct_string_view zone_id;
  34. };
  35. auto
  36. parse(
  37. char const*& it,
  38. char const* const end
  39. ) const noexcept ->
  40. system::result<value_type>;
  41. };
  42. constexpr ipv6_addrz_rule_t ipv6_addrz_rule{};
  43. } // detail
  44. } // urls
  45. } // boost
  46. #endif