Files
scylladb/http/json_path.cc
Amnon Heiman f2147e7490 Http adding the json path
Json path are used when parsing the swagger files. Each path represent
an operation in the swagger files.

They are used to simplified setting a handler or a function to a path.

For example: the code generation would define a json_path like:

path_description hello_world("/hello/world",GET,"hello_world", {},{});

Now to define the handler that would use hello_world, you can simply do:

hello_world.set(r,
            [](const_req req) {
               return "hello world";
});

When r is a reference to a route object.

Signed-off-by: Amnon Heiman <amnon@cloudius-systems.com>
2015-03-30 15:38:41 +03:00

66 lines
1.9 KiB
C++

/*
* This file is open source software, licensed to you under the terms
* of the Apache License, Version 2.0 (the "License"). See the NOTICE file
* distributed with this work for additional information regarding copyright
* ownership. You may not use this file except in compliance with the License.
*
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
/*
* Copyright 2015 Cloudius Systems
*/
#include "json_path.hh"
namespace httpd {
using namespace std;
void path_description::set(routes& _routes, handler_base* handler) const {
for (auto& i : mandatory_queryparams) {
handler->mandatory(i);
}
if (params.size() == 0)
_routes.put(operations.method, path, handler);
else {
match_rule* rule = new match_rule(handler);
rule->add_str(path);
for (auto i = params.begin(); i != params.end(); ++i) {
rule->add_param(std::get<0>(*i), std::get<1>(*i));
}
_routes.add(rule, operations.method);
}
}
void path_description::set(routes& _routes,
const json_request_function& f) const {
set(_routes, new function_handler(f));
}
path_description::path_description(const sstring& path, operation_type method,
const sstring& nickname,
const std::vector<std::pair<sstring, bool>>& path_parameters,
const std::vector<sstring>& mandatory_params)
: path(path), operations(method, nickname) {
for (auto man : mandatory_params) {
pushmandatory_param(man);
}
for (auto param : path_parameters) {
params.push_back(param);
}
}
}