RESTinio
Toggle main menu visibility
Loading...
Searching...
No Matches
restinio
helpers
http_field_parsers
transfer-encoding.hpp
Go to the documentation of this file.
1
/*
2
* RESTinio
3
*/
4
5
/*!
6
* @file
7
* @brief Stuff related to value of Transfer-Encoding HTTP-field.
8
*
9
* @since v.0.6.9
10
*/
11
12
#
pragma
once
13
14
#
include
<
restinio
/
helpers
/
http_field_parsers
/
basics
.
hpp
>
15
16
#
include
<
variant
>
17
#
include
<
tuple
>
18
19
namespace
restinio
20
{
21
22
namespace
http_field_parsers
23
{
24
25
//
26
// transfer_encoding_value_t
27
//
28
/*!
29
* @brief Tools for working with the value of Transfer-Encoding HTTP-field.
30
*
31
* This struct represents parsed value of HTTP-field Transfer-Encoding
32
* (see https://tools.ietf.org/html/rfc7230#section-3.3.1 and
33
* https://tools.ietf.org/html/rfc7230#section-4):
34
@verbatim
35
Transfer-Encoding = 1#transfer-coding
36
transfer-coding = "chunked"
37
/ "compress"
38
/ "deflate"
39
/ ("gzip" | "x-gzip")
40
/ transfer-extension
41
transfer-extension = token *( OWS ";" OWS transfer-parameter )
42
transfer-parameter = token BWS "=" BWS ( token / quoted-string )
43
@endverbatim
44
*
45
* @since v.0.6.9
46
*/
47
struct
transfer_encoding_value_t
48
{
49
//! Enumeration for transfer-coding values from RFC7230.
50
enum
class
known_transfer_coding_t
51
{
52
chunked
,
53
compress
,
54
deflate
,
55
gzip
,
56
};
57
58
[[nodiscard]]
59
static
constexpr
known_transfer_coding_t
chunked
()
noexcept
60
{
return
known_transfer_coding_t
::
chunked
; }
61
62
[[nodiscard]]
63
static
constexpr
known_transfer_coding_t
compress
()
noexcept
64
{
return
known_transfer_coding_t
::
compress
; }
65
66
[[nodiscard]]
67
static
constexpr
known_transfer_coding_t
deflate
()
noexcept
68
{
return
known_transfer_coding_t
::
deflate
; }
69
70
[[nodiscard]]
71
static
constexpr
known_transfer_coding_t
gzip
()
noexcept
72
{
return
known_transfer_coding_t
::
gzip
; }
73
74
//! Description of transfer-extension.
75
struct
transfer_extension_t
76
{
77
std::string
token
;
78
parameter_with_mandatory_value_container_t
transfer_parameters
;
79
80
[[nodiscard]]
81
bool
82
operator
==(
const
transfer_extension_t
& o )
const
noexcept
83
{
84
return
std::tie(
this
->
token
,
this
->transfer_parameters) ==
85
std::tie(o
.
token
, o.transfer_parameters);
86
}
87
};
88
89
//! Type for one value from Transfer-Encoding HTTP-field.
90
using
value_t
= std::variant<
91
known_transfer_coding_t
,
92
transfer_extension_t
93
>;
94
95
using
value_container_t
=
std
::
vector
<
value_t
>;
96
97
value_container_t
values
;
98
99
/*!
100
* @brief A factory function for a parser of Transfer-Encoding value.
101
*
102
* @since v.0.6.9
103
*/
104
[[nodiscard]]
105
static
auto
106
make_parser
()
107
{
108
return
produce<
transfer_encoding_value_t
>(
109
non_empty_comma_separated_list_p< value_container_t >(
110
produce< value_t >(
111
alternatives(
112
expected_caseless_token_p(
"chunked"
)
113
>> just_result( chunked() ),
114
expected_caseless_token_p(
"compress"
)
115
>> just_result( compress() ),
116
expected_caseless_token_p(
"deflate"
)
117
>> just_result( deflate() ),
118
expected_caseless_token_p(
"gzip"
)
119
>> just_result( gzip() ),
120
expected_caseless_token_p(
"x-gzip"
)
121
>> just_result( gzip() ),
122
produce< transfer_extension_t >(
123
token_p() >> to_lower() >> &transfer_extension_t::token,
124
params_with_value_p()
125
>> &transfer_extension_t::transfer_parameters
126
) >> as_result()
127
)
128
)
129
) >> &transfer_encoding_value_t::values
130
);
131
}
132
133
/*!
134
* @brief An attempt to parse Transfer-Encoding HTTP-field.
135
*
136
* @since v.0.6.9
137
*/
138
[[nodiscard]]
139
static
expected_t
<
140
transfer_encoding_value_t
,
141
restinio
::
easy_parser
::
parse_error_t
>
142
try_parse
( string_view_t what )
143
{
144
return
restinio
::
easy_parser
::try_parse( what, make_parser() );
145
}
146
};
147
148
}
/* namespace http_field_parsers */
149
150
}
/* namespace restinio */
restinio::easy_parser
Definition
easy_parser.hpp:42
restinio::http_field_parsers
Definition
accept-charset.hpp:20
restinio
Definition
sendfile_operation_default.ipp:12
restinio::http_field_parsers::transfer_encoding_value_t::transfer_extension_t
Description of transfer-extension.
Definition
transfer-encoding.hpp:76
restinio::http_field_parsers::transfer_encoding_value_t::transfer_extension_t::operator==
bool operator==(const transfer_extension_t &o) const noexcept
Definition
transfer-encoding.hpp:82
restinio::http_field_parsers::transfer_encoding_value_t::transfer_extension_t::transfer_parameters
parameter_with_mandatory_value_container_t transfer_parameters
Definition
transfer-encoding.hpp:78
restinio::http_field_parsers::transfer_encoding_value_t::transfer_extension_t::token
std::string token
Definition
transfer-encoding.hpp:77
restinio::http_field_parsers::transfer_encoding_value_t
Tools for working with the value of Transfer-Encoding HTTP-field.
Definition
transfer-encoding.hpp:48
restinio::http_field_parsers::transfer_encoding_value_t::make_parser
static auto make_parser()
A factory function for a parser of Transfer-Encoding value.
Definition
transfer-encoding.hpp:106
restinio::http_field_parsers::transfer_encoding_value_t::try_parse
static expected_t< transfer_encoding_value_t, restinio::easy_parser::parse_error_t > try_parse(string_view_t what)
An attempt to parse Transfer-Encoding HTTP-field.
Definition
transfer-encoding.hpp:142
restinio::http_field_parsers::transfer_encoding_value_t::deflate
static constexpr known_transfer_coding_t deflate() noexcept
Definition
transfer-encoding.hpp:67
restinio::http_field_parsers::transfer_encoding_value_t::compress
static constexpr known_transfer_coding_t compress() noexcept
Definition
transfer-encoding.hpp:63
restinio::http_field_parsers::transfer_encoding_value_t::value_t
std::variant< known_transfer_coding_t, transfer_extension_t > value_t
Type for one value from Transfer-Encoding HTTP-field.
Definition
transfer-encoding.hpp:90
restinio::http_field_parsers::transfer_encoding_value_t::known_transfer_coding_t
known_transfer_coding_t
Enumeration for transfer-coding values from RFC7230.
Definition
transfer-encoding.hpp:51
restinio::http_field_parsers::transfer_encoding_value_t::known_transfer_coding_t::compress
@ compress
Definition
transfer-encoding.hpp:53
restinio::http_field_parsers::transfer_encoding_value_t::known_transfer_coding_t::gzip
@ gzip
Definition
transfer-encoding.hpp:55
restinio::http_field_parsers::transfer_encoding_value_t::known_transfer_coding_t::deflate
@ deflate
Definition
transfer-encoding.hpp:54
restinio::http_field_parsers::transfer_encoding_value_t::known_transfer_coding_t::chunked
@ chunked
Definition
transfer-encoding.hpp:52
restinio::http_field_parsers::transfer_encoding_value_t::values
value_container_t values
Definition
transfer-encoding.hpp:97
restinio::http_field_parsers::transfer_encoding_value_t::gzip
static constexpr known_transfer_coding_t gzip() noexcept
Definition
transfer-encoding.hpp:71
restinio::http_field_parsers::transfer_encoding_value_t::chunked
static constexpr known_transfer_coding_t chunked() noexcept
Definition
transfer-encoding.hpp:59
Generated by
1.17.0