RESTinio
Loading...
Searching...
No Matches
accept-language.hpp
Go to the documentation of this file.
1/*
2 * RESTinio
3 */
4
5/*!
6 * @file
7 * @brief Stuff related to value of Accept-Language HTTP-field.
8 *
9 * @since v.0.6.2
10 */
11
12#pragma once
13
14#include <restinio/helpers/http_field_parsers/basics.hpp>
15
16namespace restinio
17{
18
19namespace http_field_parsers
20{
21
23{
24
25namespace ep_impl = restinio::easy_parser::impl;
26namespace hfp_impl = restinio::http_field_parsers::impl;
27
28[[nodiscard]]
29inline auto
31{
32 return produce<std::string>(
33 repeat(1u, 8u, alpha_symbol_p() >> to_container()),
34 repeat(0u, N,
35 symbol_p('-') >> to_container(),
36 repeat(1u, 8u, alphanum_symbol_p() >> to_container())
37 )
38 );
39}
40
41[[nodiscard]]
42inline auto
44{
45 return produce<std::string>(
46 alternatives(
49 )
50 );
51}
52
53} /* namespace accept_language_details */
54
55//
56// accept_language_value_t
57//
58/*!
59 * @brief Tools for working with the value of Accept-Language HTTP-field.
60 *
61 * This struct represents parsed value of HTTP-field Accept-Charset
62 * (see https://tools.ietf.org/html/rfc7231#section-5.3.5 and
63 * https://tools.ietf.org/html/rfc4647#section-2.1):
64@verbatim
65Accept-Language = 1#( language-range [ weight ] )
66language-range = (1*8ALPHA *("-" 1*8alphanum)) / "*"
67alphanum = ALPHA / DIGIT
68@endverbatim
69 *
70 * @note
71 * Values of `language-range` keep their case during parsing
72 * (it means that they are not converted to lower or upper case).
73 *
74 * @since v.0.6.2
75 */
77{
78 struct item_t
79 {
80 std::string language_range;
82 };
83
85
87
88 /*!
89 * @brief A factory function for a parser of Accept-Language value.
90 *
91 * @since v.0.6.2
92 */
93 [[nodiscard]]
94 static auto
96 {
97 using namespace accept_language_details;
98
99 return produce< accept_language_value_t >(
100 non_empty_comma_separated_list_p< item_container_t >(
101 produce< item_t >(
102 make_language_range_p() >> &item_t::language_range,
103 maybe( weight_p() >> &item_t::weight )
104 )
105 ) >> &accept_language_value_t::languages
106 );
107 }
108
109 /*!
110 * @brief An attempt to parse Accept-Language HTTP-field.
111 *
112 * @since v.0.6.2
113 */
114 [[nodiscard]]
116 try_parse( string_view_t what )
117 {
118 return restinio::easy_parser::try_parse( what, make_parser() );
119 }
120};
121
122} /* namespace http_field_parsers */
123
124} /* namespace restinio */
A class for holding the parsed value of qvalue from RFC7231.
Definition basics.hpp:136
auto to_container()
A factory function to create a to_container_consumer.
auto as_result() noexcept
A factory function to create a as_result_consumer.
auto symbol_p(char expected) noexcept
A factory function to create a symbol_producer.
Tools for working with the value of Accept-Language HTTP-field.
static auto make_parser()
A factory function for a parser of Accept-Language value.
static expected_t< accept_language_value_t, restinio::easy_parser::parse_error_t > try_parse(string_view_t what)
An attempt to parse Accept-Language HTTP-field.