14 #include <restinio/helpers/http_field_parsers/basics.hpp> 38 template<
typename T >
56 template<
typename T >
73 template<
typename T >
84 template<
typename T >
95 template<
typename T >
125 template<
typename T >
149 template<
typename T >
154 return produce< byte_range_spec_t<T> >(
156 produce< double_ended_range_t<T> >(
157 non_negative_decimal_number_p<T>()
158 >> &double_ended_range_t<T>::first,
160 non_negative_decimal_number_p<T>()
161 >> &double_ended_range_t<T>::last
163 produce< open_ended_range_t<T> >(
164 non_negative_decimal_number_p<T>()
165 >> &open_ended_range_t<T>::first,
168 produce< suffix_length_t<T> >(
170 non_negative_decimal_number_p<T>()
171 >> &suffix_length_t<T>::length
186 return sequence( exact(
"bytes" ), symbol(
'=') );
208 template<
typename T >
213 return produce< byte_ranges_specifier_t<T> >(
214 make_bytes_prefix_parser(),
215 force_only_this_alternative(
216 non_empty_comma_separated_list_p<
217 std::vector< byte_range_spec_t<T> > >(
218 make_byte_range_spec_parser<T>()
219 ) >> &byte_ranges_specifier_t<T>::ranges
241 return produce< other_ranges_specifier_t >(
242 token_p() >> &other_ranges_specifier_t::range_unit,
244 force_only_this_alternative(
245 produce< std::string >(
246 repeat( 1u, N, vchar_symbol_p() >> to_container() )
247 ) >> &other_ranges_specifier_t::range_set
285 template<
typename T >
457 return produce< range_value_t >(
459 make_byte_ranges_specifier_parser<T>() >>
460 &range_value_t::value,
461 make_other_ranges_specifier_parser() >>
462 &range_value_t::value
expected_t< std::optional< string_view_t >, not_found_t > find_first(const parameter_with_optional_value_container_t &where, string_view_t what)
A helper function to find the first occurence of a parameter with the specified value.
A description of a range value of units those are not "bytes".
auto make_bytes_prefix_parser()
Factory for a parser of 'bytes=' prefix.
Value of range for the case where only length of range's suffix is defined.
Value of range for the case where both ends of the range are defined.
std::enable_if< std::is_same< Parameter_Container, query_string_params_t >::value||std::is_same< Parameter_Container, router::route_params_t >::value, std::optional< Value_Type > >::type opt_value(const Parameter_Container ¶ms, string_view_t key)
Gets the value of a parameter specified by key wrapped in std::optional<Value_Type> if parameter exis...
static expected_t< range_value_t, restinio::easy_parser::parse_error_t > try_parse(string_view_t what)
An attempt to parse Range HTTP-field.
Tools for working with the value of Range HTTP-field.
static auto make_parser()
A factory function for a parser of Range value.
auto make_byte_range_spec_parser()
Factory for creation of a parser for byte_range_spec values.
Value of range for the case where only left border of the range is defined.
auto make_other_ranges_specifier_parser()
Factory for creation of a parser for other_ranges_specifier values.
auto make_byte_ranges_specifier_parser()
Factory for creation of a parser for byte_ranges_specifier values.
std::vector< byte_range_spec_t< T > > ranges