Line data Source code
1 : //
2 : // Copyright (c) 2021 Vinnie Falco (vinnie.falco@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/cppalliance/http_proto
8 : //
9 :
10 : #include <boost/http_proto/rfc/upgrade_rule.hpp>
11 : #include <boost/http_proto/rfc/token_rule.hpp>
12 : #include <boost/url/grammar/error.hpp>
13 : #include <boost/url/grammar/parse.hpp>
14 :
15 : namespace boost {
16 : namespace http_proto {
17 : namespace implementation_defined {
18 :
19 : auto
20 41 : upgrade_protocol_rule_t::
21 : parse(
22 : char const*& it,
23 : char const* end) const noexcept ->
24 : system::result<value_type>
25 : {
26 41 : value_type t;
27 : // token
28 : {
29 41 : auto rv = grammar::parse(
30 : it, end, token_rule);
31 41 : if(! rv)
32 3 : return rv.error();
33 38 : t.name = *rv;
34 : }
35 : // [ "/" token ]
36 38 : if( it == end ||
37 8 : *it != '/')
38 31 : return t;
39 7 : ++it;
40 7 : auto rv = grammar::parse(
41 : it, end, token_rule);
42 7 : if(! rv)
43 0 : return rv.error();
44 7 : t.version = *rv;
45 7 : return t;
46 : }
47 :
48 : } // implementation_defined
49 : } // http_proto
50 : } // boost
|