RESTinio
Toggle main menu visibility
Loading...
Searching...
No Matches
restinio
helpers
http_field_parsers
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
22
namespace
accept_language_details
23
{
24
25
namespace
ep_impl =
restinio
::
easy_parser
::
impl
;
26
namespace
hfp_impl =
restinio
::
http_field_parsers
::
impl
;
27
28
[[
nodiscard
]]
29
inline
auto
30
make_language_tag_p
()
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
]]
42
inline
auto
43
make_language_range_p
()
44
{
45
return
produce<std::string>(
46
alternatives(
47
symbol_p
(
'*'
)
>>
to_container
(
)
,
48
make_language_tag_p() >> as_result()
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
*/
76
struct
accept_language_value_t
77
{
78
struct
item_t
79
{
80
std::string
language_range
;
81
qvalue_t
weight
{
qvalue_t
::
maximum
}
;
82
};
83
84
using
item_container_t
=
std
::
vector
<
item_t
>;
85
86
item_container_t
languages
;
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
95
make_parser
()
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]]
115
static
expected_t
<
accept_language_value_t
,
restinio
::
easy_parser
::
parse_error_t
>
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 */
restinio::http_field_parsers::qvalue_t
A class for holding the parsed value of qvalue from RFC7231.
Definition
basics.hpp:136
restinio::http_field_parsers::qvalue_t::qvalue_t
constexpr qvalue_t(qvalue_details::extremum_max_t) noexcept
Definition
basics.hpp:202
restinio::http_field_parsers::qvalue_t::maximum
static constexpr qvalue_details::extremum_max_t maximum
The indicator that tells that new qvalue object should have the maximal allowed value.
Definition
basics.hpp:147
restinio::easy_parser::impl
Definition
easy_parser.hpp:283
restinio::easy_parser
Definition
easy_parser.hpp:42
restinio::easy_parser::to_container
auto to_container()
A factory function to create a to_container_consumer.
Definition
easy_parser.hpp:4566
restinio::easy_parser::symbol_p
auto symbol_p(char expected) noexcept
A factory function to create a symbol_producer.
Definition
easy_parser.hpp:3958
restinio::easy_parser::N
constexpr std::size_t N
A special marker that means infinite repetitions.
Definition
easy_parser.hpp:458
restinio::http_field_parsers::accept_language_details
Definition
accept-language.hpp:23
restinio::http_field_parsers::accept_language_details::make_language_tag_p
auto make_language_tag_p()
Definition
accept-language.hpp:30
restinio::http_field_parsers::accept_language_details::make_language_range_p
auto make_language_range_p()
Definition
accept-language.hpp:43
restinio::http_field_parsers::impl
Definition
basics.hpp:249
restinio::http_field_parsers
Definition
accept-charset.hpp:20
restinio
Definition
sendfile_operation_default.ipp:12
restinio::http_field_parsers::accept_language_value_t::item_t
Definition
accept-language.hpp:79
restinio::http_field_parsers::accept_language_value_t::item_t::weight
qvalue_t weight
Definition
accept-language.hpp:81
restinio::http_field_parsers::accept_language_value_t::item_t::language_range
std::string language_range
Definition
accept-language.hpp:80
restinio::http_field_parsers::accept_language_value_t
Tools for working with the value of Accept-Language HTTP-field.
Definition
accept-language.hpp:77
restinio::http_field_parsers::accept_language_value_t::make_parser
static auto make_parser()
A factory function for a parser of Accept-Language value.
Definition
accept-language.hpp:95
restinio::http_field_parsers::accept_language_value_t::try_parse
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.
Definition
accept-language.hpp:116
restinio::http_field_parsers::accept_language_value_t::languages
item_container_t languages
Definition
accept-language.hpp:86
Generated by
1.17.0