Skip to content
This repository was archived by the owner on Jul 4, 2025. It is now read-only.

Commit 30934df

Browse files
committed
fix: msvc string limitation
1 parent e2fd6d3 commit 30934df

File tree

3 files changed

+59
-21
lines changed

3 files changed

+59
-21
lines changed

engine/CMakeLists.txt

Lines changed: 58 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -80,28 +80,71 @@ find_package(CURL REQUIRED)
8080
find_package(SQLiteCpp REQUIRED)
8181
find_package(eventpp CONFIG REQUIRED)
8282

83+
## Generating openapi json
8384
file(READ "${CMAKE_CURRENT_SOURCE_DIR}/../docs/static/openapi/jan.json" JSON_CONTENT)
84-
string(REPLACE "\\" "\\\\" JSON_CONTENT "${JSON_CONTENT}")
85-
string(REPLACE "\"" "\\\"" JSON_CONTENT "${JSON_CONTENT}")
86-
string(REPLACE "\n" "\\n" JSON_CONTENT "${JSON_CONTENT}")
87-
88-
configure_file(
89-
"${CMAKE_CURRENT_SOURCE_DIR}/cortex_openapi.h.in"
90-
"${CMAKE_CURRENT_BINARY_DIR}/cortex_openapi.h"
91-
@ONLY
85+
string(LENGTH "${JSON_CONTENT}" CONTENT_LENGTH)
86+
message("Content length: ${CONTENT_LENGTH}")
87+
88+
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/cortex_openapi.h"
89+
"#pragma once\n"
90+
"#include <string>\n"
91+
"#include <sstream>\n\n"
92+
"namespace CortexOpenApi {\n"
9293
)
9394

94-
# file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/cortex_openapi.h"
95-
# "#pragma once\n\n"
96-
# "namespace CortexOpenApi {\n"
97-
# " constexpr const char JSON_CONTENT[] = \"${JSON_CONTENT}\";\n"
98-
# "}\n"
99-
# )
95+
set(CHUNK_SIZE 2000)
96+
set(OFFSET 0)
97+
set(CHUNK_INDEX 0)
98+
99+
while(${OFFSET} LESS ${CONTENT_LENGTH})
100+
math(EXPR REMAINING "${CONTENT_LENGTH} - ${OFFSET}")
101+
102+
if(${REMAINING} LESS ${CHUNK_SIZE})
103+
string(SUBSTRING "${JSON_CONTENT}" ${OFFSET} ${REMAINING} CHUNK_CONTENT)
104+
math(EXPR OFFSET "${OFFSET} + ${REMAINING}")
105+
else()
106+
string(SUBSTRING "${JSON_CONTENT}" ${OFFSET} ${CHUNK_SIZE} CHUNK_CONTENT)
107+
math(EXPR OFFSET "${OFFSET} + ${CHUNK_SIZE}")
108+
endif()
109+
110+
# Escape special characters
111+
string(REPLACE "\\" "\\\\" CHUNK_CONTENT "${CHUNK_CONTENT}")
112+
string(REPLACE "\"" "\\\"" CHUNK_CONTENT "${CHUNK_CONTENT}")
113+
string(REPLACE "\n" "\\n" CHUNK_CONTENT "${CHUNK_CONTENT}")
114+
115+
file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/cortex_openapi.h"
116+
" inline std::string const json_part_${CHUNK_INDEX} = \"${CHUNK_CONTENT}\";\n"
117+
)
118+
119+
math(EXPR CHUNK_INDEX "${CHUNK_INDEX} + 1")
120+
endwhile()
121+
122+
# Add the get function that concatenates all parts
123+
file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/cortex_openapi.h"
124+
"\n inline std::string GetOpenApiJson() {\n"
125+
" std::ostringstream ss;\n"
126+
)
127+
128+
# Add each part to the stream
129+
set(INDEX 0)
130+
while(${INDEX} LESS ${CHUNK_INDEX})
131+
file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/cortex_openapi.h"
132+
" ss << json_part_${INDEX};\n"
133+
)
134+
math(EXPR INDEX "${INDEX} + 1")
135+
endwhile()
136+
137+
file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/cortex_openapi.h"
138+
" return ss.str();\n"
139+
" }\n"
140+
"}\n"
141+
)
142+
## End of generating openapi json
100143

101144
add_executable(${TARGET_NAME} main.cc
102145
${CMAKE_CURRENT_SOURCE_DIR}/utils/cpuid/cpu_info.cc
103146
${CMAKE_CURRENT_SOURCE_DIR}/utils/file_logger.cc
104-
)
147+
)
105148

106149
target_include_directories(${TARGET_NAME} PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
107150

engine/controllers/swagger.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ constexpr auto ScalarUi = R"(
2424
Json::Value SwaggerController::generateOpenAPISpec() {
2525
Json::Value root;
2626
Json::Reader reader;
27-
reader.parse(CortexOpenApi::JSON_CONTENT, root);
27+
reader.parse(CortexOpenApi::GetOpenApiJson(), root);
2828
return root;
2929
}
3030

engine/cortex_openapi.h.in

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)