1//
2// Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot 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
10#ifndef BOOST_URL_RFC_DETAIL_PORT_RULE_HPP
11#define BOOST_URL_RFC_DETAIL_PORT_RULE_HPP
12
13#include "boost/url/detail/config.hpp"
14#include "boost/url/error_types.hpp"
15#include <boost/core/detail/string_view.hpp>
16#include <cstdint>
17
18namespace boost {
19namespace urls {
20namespace detail {
21
22/** Rule for port
23
24 @par BNF
25 @code
26 port = *DIGIT
27 @endcode
28
29 @par Specification
30 @li <a href="https://datatracker.ietf.org/doc/html/rfc3986#section-3.2.2"
31 >3.2.2. Host (rfc3986)</a>
32
33 @see
34 @ref port_part_rule.
35*/
36struct port_rule
37{
38 struct value_type
39 {
40 core::string_view str;
41 std::uint16_t number = 0;
42 bool has_number = false;
43 };
44
45 system::result<value_type>
46 parse(
47 char const*& it,
48 char const* end) const noexcept;
49};
50
51//------------------------------------------------
52
53/** Rule for port-part
54
55 @par BNF
56 @code
57 port-part = [ ":" port ]
58
59 port = *DIGIT
60 @endcode
61
62 @par Specification
63 @li <a href="https://datatracker.ietf.org/doc/html/rfc3986#section-3.2.2"
64 >3.2.2. Host (rfc3986)</a>
65
66 @see
67 @ref port_rule.
68*/
69struct port_part_rule_t
70{
71 struct value_type
72 {
73 bool has_port = false;
74 core::string_view port;
75 bool has_number = false;
76 std::uint16_t port_number = 0;
77 };
78
79 auto
80 parse(
81 char const*& it,
82 char const* end
83 ) const noexcept ->
84 system::result<value_type>;
85};
86
87constexpr port_part_rule_t port_part_rule{};
88
89} // detail
90} // urls
91} // boost
92
93#endif
94

source code of boost/libs/url/src/rfc/detail/port_rule.hpp