Create request handler.
| 51 | |
| 52 | // Create request handler. |
| 53 | restinio::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 ), |
no test coverage detected