RESTinio
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 
16 namespace restinio
17 {
18 
19 namespace http_field_parsers
20 {
21 
23 {
24 
25 namespace ep_impl = restinio::easy_parser::impl;
27 
29 inline 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 
42 inline auto
44 {
45  return produce<std::string>(
47  symbol_p('*') >> to_container(),
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
65 Accept-Language = 1#( language-range [ weight ] )
66 language-range = (1*8ALPHA *("-" 1*8alphanum)) / "*"
67 alphanum = 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  {
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  */
94  static auto
96  {
97  using namespace accept_language_details;
98 
101  produce< item_t >(
103  maybe( weight_p() >> &item_t::weight )
104  )
106  );
107  }
108 
109  /*!
110  * @brief An attempt to parse Accept-Language HTTP-field.
111  *
112  * @since v.0.6.2
113  */
117  {
119  }
120 };
121 
122 } /* namespace http_field_parsers */
123 
124 } /* namespace restinio */
static RESTINIO_NODISCARD 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.
RESTINIO_NODISCARD auto try_parse_field(const generic_request_t< Extra_Data > &req, http_field_t field_id, string_view_t default_value=string_view_t{})
A helper function for extraction and parsing a value of HTTP-field.
std::enable_if< std::is_same< Parameter_Container, query_string_params_t >::value||std::is_same< Parameter_Container, router::route_params_t >::value, optional_t< Value_Type > >::type opt_value(const Parameter_Container &params, string_view_t key)
Gets the value of a parameter specified by key wrapped in optional_t<Value_Type> if parameter exists ...
Definition: value_or.hpp:64