RESTinio

accept-language.hpp
Go to the documentation of this file.
1/*
2 * RESTinio
3 */
4
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 RESTINIO_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 RESTINIO_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//
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
93 RESTINIO_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
114 RESTINIO_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 */
125
basics.hpp
Utilities for parsing values of http-fields.
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::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_NODISCARD
#define RESTINIO_NODISCARD
Definition: compiler_features.hpp:33
restinio::easy_parser::impl
Definition: easy_parser.hpp:280
restinio::easy_parser::maybe
RESTINIO_NODISCARD auto maybe(Clauses &&... clauses)
A factory function to create an optional clause.
Definition: easy_parser.hpp:3634
restinio::easy_parser::try_parse
RESTINIO_NODISCARD expected_t< typename Producer::result_type, parse_error_t > try_parse(string_view_t from, Producer producer)
Perform the parsing of the specified content by using specified value producer.
Definition: easy_parser.hpp:5042
restinio::easy_parser::repeat
RESTINIO_NODISCARD auto repeat(std::size_t min_occurences, std::size_t max_occurences, Clauses &&... clauses)
A factory function to create repetitor of subclauses.
Definition: easy_parser.hpp:3876
restinio::easy_parser::as_result
RESTINIO_NODISCARD auto as_result() noexcept
A factory function to create a as_result_consumer.
Definition: easy_parser.hpp:4470
restinio::easy_parser::N
constexpr std::size_t N
A special marker that means infinite repetitions.
Definition: easy_parser.hpp:455
restinio::easy_parser::to_container
RESTINIO_NODISCARD auto to_container()
A factory function to create a to_container_consumer.
Definition: easy_parser.hpp:4583
restinio::easy_parser::symbol_p
RESTINIO_NODISCARD auto symbol_p(char expected) noexcept
A factory function to create a symbol_producer.
Definition: easy_parser.hpp:3955
restinio::easy_parser::alternatives
RESTINIO_NODISCARD auto alternatives(Clauses &&... clauses)
A factory function to create an alternatives clause.
Definition: easy_parser.hpp:3595
restinio::http_field_parsers::accept_language_details::make_language_tag_p
RESTINIO_NODISCARD auto make_language_tag_p()
Definition: accept-language.hpp:30
restinio::http_field_parsers::accept_language_details::make_language_range_p
RESTINIO_NODISCARD auto make_language_range_p()
Definition: accept-language.hpp:43
restinio::http_field_parsers::impl
Definition: basics.hpp:247
restinio::http_field_parsers::alphanum_symbol_p
RESTINIO_NODISCARD auto alphanum_symbol_p()
A factory for producer of symbol that an ALPHA or DIGIT.
Definition: basics.hpp:810
restinio::http_field_parsers::alpha_symbol_p
RESTINIO_NODISCARD auto alpha_symbol_p()
A factory for producer of ALPHA symbols.
Definition: basics.hpp:788
restinio::http_field_parsers::weight_p
RESTINIO_NODISCARD auto weight_p() noexcept
A factory function to create a producer for weight parameter.
Definition: basics.hpp:1277
restinio
Definition: asio_include.hpp:21
restinio::string_view_t
nonstd::string_view string_view_t
Definition: string_view.hpp:19
restinio::expected_t
nonstd::expected< T, E > expected_t
Definition: expected.hpp:22
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::languages
item_container_t languages
Definition: accept-language.hpp:86
restinio::http_field_parsers::accept_language_value_t::item_container_t
std::vector< item_t > item_container_t
Definition: accept-language.hpp:84
restinio::http_field_parsers::accept_language_value_t::make_parser
static RESTINIO_NODISCARD 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 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.
Definition: accept-language.hpp:116