Skip to content

Commit

Permalink
Bug report
Browse files Browse the repository at this point in the history
  • Loading branch information
Mis1eader-dev committed Sep 12, 2024
1 parent 73406d1 commit 5903346
Show file tree
Hide file tree
Showing 7 changed files with 232 additions and 5 deletions.
38 changes: 38 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,23 @@
cmake_minimum_required(VERSION 3.5)

# Options

set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
set(BUILD_CTL OFF)
set(BUILD_EXAMPLES OFF)
set(BUILD_ORM OFF)
set(COZ_PROFILING OFF)
set(BUILD_DOC OFF)
set(BUILD_POSTGRESQL OFF)
set(BUILD_MYSQL OFF)
set(BUILD_SQLITE OFF)
set(BUILD_REDIS OFF)
set(BUILD_BROTLI ON)
set(BUILD_YAML_CONFIG OFF)
set(USE_SUBMODULE ON)
set(BUILD_SHARED_LIBS OFF)
set(CMAKE_BUILD_TYPE Release)

project(drogon)

message(STATUS "compiler: " ${CMAKE_CXX_COMPILER_ID})
Expand Down Expand Up @@ -854,3 +872,23 @@ if(DOXYGEN_FOUND)
endif(DOXYGEN_FOUND)

include(cmake/Packages.cmake)

project(
match_bug_example
LANGUAGES CXX
VERSION 1.0.0
)

add_executable(${PROJECT_NAME} main.cpp)

set_target_properties(${PROJECT_NAME}
PROPERTIES
CXX_STANDARD 20
CXX_EXTENSIONS OFF
)

target_link_libraries(${PROJECT_NAME} PUBLIC drogon)

target_include_directories(${PROJECT_NAME} PUBLIC
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/inc>
)
5 changes: 5 additions & 0 deletions a.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash

cd $(dirname $0)

./bake.sh && ./run.sh "$@"
5 changes: 5 additions & 0 deletions bake.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash

cd $(dirname $0)

ninja -C ./build "$@"
10 changes: 5 additions & 5 deletions build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,14 @@ function build_drogon() {

#The folder in which we will build drogon
build_dir='./build'
if [ -d $build_dir ]; then
echo "Deleted folder: ${build_dir}"
rm -rf $build_dir
fi
#if [ -d $build_dir ]; then
# echo "Deleted folder: ${build_dir}"
# rm -rf $build_dir
#fi

#Create building folder
echo "Created building folder: ${build_dir}"
mkdir $build_dir
mkdir -p $build_dir

echo "Entering folder: ${build_dir}"
cd $build_dir
Expand Down
5 changes: 5 additions & 0 deletions cmake.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash

cd $(dirname $0)

cmake . -B ./build -G 'Ninja' "$@"
169 changes: 169 additions & 0 deletions main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
#include "drogon/HttpAppFramework.h"
#include "drogon/HttpController.h"
#include "drogon/HttpResponse.h"
#include "drogon/drogon.h"
#include <string>

using namespace drogon;
using std::string;

#define TEXT_RESP(txt) \
auto resp = HttpResponse::newHttpResponse(); \
resp->setBody(txt); \
callback(resp)

class A : public HttpController<A>
{
public:
void asyncHandleHttpRequest(
const HttpRequestPtr& req,
std::function<void (const HttpResponsePtr&)>&& callback,
string&& city,
string&& id)
{
TEXT_RESP("A");
}

METHOD_LIST_BEGIN
ADD_METHOD_TO(
A::asyncHandleHttpRequest,
"/api/clients/{user-group-city}/{user-group-id}/users",
HttpMethod::Get,
);
METHOD_LIST_END
};

class B : public HttpController<B>
{
public:
void asyncHandleHttpRequest(
const HttpRequestPtr& req,
std::function<void (const HttpResponsePtr&)>&& callback,
string&& dev)
{
TEXT_RESP("B");
}

METHOD_LIST_BEGIN
ADD_METHOD_TO(
B::asyncHandleHttpRequest,
"/api/clients/device-groups/{device-group-id}/devices",
HttpMethod::Get,
);
METHOD_LIST_END
};

class C : public HttpController<C>
{
public:
void asyncHandleHttpRequest(
const HttpRequestPtr& req,
std::function<void (const HttpResponsePtr&)>&& callback,
string&& city,
string&& id,
string&& dev)
{
TEXT_RESP("C");
}

METHOD_LIST_BEGIN
ADD_METHOD_TO(
C::asyncHandleHttpRequest,
"/api/clients/{user-group-city}/{user-group-id}/device-groups/{device-group-id}/devices",
HttpMethod::Get,
);
METHOD_LIST_END
};

// Will never get called, is overshadowed by G
class D : public HttpController<D>
{
public:
void asyncHandleHttpRequest(
const HttpRequestPtr& req,
std::function<void (const HttpResponsePtr&)>&& callback,
string&& id)
{
TEXT_RESP("D");
}

METHOD_LIST_BEGIN
ADD_METHOD_TO(
D::asyncHandleHttpRequest,
"/api/clients/device-groups/{device-group-id}",
HttpMethod::Get,
);
METHOD_LIST_END
};

class E : public HttpController<E>
{
public:
void asyncHandleHttpRequest(
const HttpRequestPtr& req,
std::function<void (const HttpResponsePtr&)>&& callback,
string&& city,
string&& id,
string&& dev)
{
TEXT_RESP("E");
}

METHOD_LIST_BEGIN
ADD_METHOD_TO(
E::asyncHandleHttpRequest,
"/api/clients/{user-group-city}/{user-group-id}/device-groups/{device-group}",
HttpMethod::Get,
);
METHOD_LIST_END
};

class F : public HttpController<F>
{
public:
void asyncHandleHttpRequest(
const HttpRequestPtr& req,
std::function<void (const HttpResponsePtr&)>&& callback,
string&& city,
string&& id)
{
TEXT_RESP("F");
}

METHOD_LIST_BEGIN
ADD_METHOD_TO(
F::asyncHandleHttpRequest,
"/api/clients/{user-group-city}/{user-group-id}/device-groups",
HttpMethod::Get,
);
METHOD_LIST_END
};

// Will overshadow D
class G : public HttpController<G>
{
public:
void asyncHandleHttpRequest(
const HttpRequestPtr& req,
std::function<void (const HttpResponsePtr&)>&& callback,
string&& city,
string&& id)
{
TEXT_RESP("G");
}

METHOD_LIST_BEGIN
ADD_METHOD_TO(
G::asyncHandleHttpRequest,
"/api/clients/{user-group-city}/{user-group-id}",
HttpMethod::Get,
);
METHOD_LIST_END
};

int main()
{
app()
.addListener("0.0.0.0", 8080)
.run();
}
5 changes: 5 additions & 0 deletions run.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash

cd $(dirname $0)

./build/match_bug_example "$@"

0 comments on commit 5903346

Please sign in to comment.