MCPcopy Create free account
hub / github.com/Stiffstream/restinio / handler

Function handler

dev/sample/try_parse_query_string/main.cpp:53–132  ·  view source on GitHub ↗

Create request handler.

Source from the content-addressed store, hash-verified

51
52// Create request handler.
53restinio::request_handling_status_t handler(
54 const restinio::request_handle_t& req,
55 query_string_parser_type parser )
56{
57 if( restinio::http_method_get() == req->header().method() )
58 {
59 fmt::basic_memory_buffer< char, 1u > response_body;
60 auto response_body_inserter = std::back_inserter( response_body );
61
62 fmt::format_to( response_body_inserter,
63 RESTINIO_FMT_FORMAT_STRING( "GET request to '{}'\n" ),
64 req->header().request_target() );
65
66 // Request header fields.
67 fmt::format_to( response_body_inserter,
68 RESTINIO_FMT_FORMAT_STRING( "HTTP-fields ({}):\n" ),
69 req->header().fields_count() );
70 for( const auto & f : req->header() )
71 {
72 fmt::format_to( response_body_inserter,
73 RESTINIO_FMT_FORMAT_STRING( "{}: {}\n" ),
74 f.name(), f.value() );
75 }
76
77 // An attempt to parse query-string.
78 const auto qs_parse_result = parser( req->header().query() );
79 if( !qs_parse_result )
80 {
81 // Return a negative response.
82 req->create_response( restinio::status_bad_request() )
83 .append_header( restinio::http_field::server, "RESTinio query string params server" )
84 .append_header_date_field()
85 .append_header( restinio::http_field::content_type, "text/plain; charset=utf-8" )
86 .set_body( "Unable to parse query-string: " +
87 qs_parse_result.error().description() )
88 .done();
89
90 return restinio::request_accepted();
91 }
92
93 // Handle query-string params.
94 const auto & qp = *qs_parse_result;
95 if( qp.empty() )
96 {
97 fmt::format_to( response_body_inserter,
98 RESTINIO_FMT_FORMAT_STRING( "No query parameters." ) );
99 }
100 else
101 {
102 fmt::format_to( response_body_inserter,
103 RESTINIO_FMT_FORMAT_STRING( "Query params ({}):\n" ),
104 qp.size() );
105
106 for( const auto & p : qp )
107 {
108 fmt::format_to( response_body_inserter,
109 RESTINIO_FMT_FORMAT_STRING( "'{}' => '{}'\n" ),
110 restinio::fmtlib_tools::streamed( p.first ),

Callers 1

mainFunction · 0.70

Calls 15

status_bad_requestFunction · 0.85
request_acceptedFunction · 0.85
streamedFunction · 0.85
request_rejectedFunction · 0.85
methodMethod · 0.80
request_targetMethod · 0.80
fields_countMethod · 0.80
nameMethod · 0.80
queryMethod · 0.80
create_responseMethod · 0.80
writeMethod · 0.80
valueMethod · 0.45

Tested by

no test coverage detected