@@ -80,28 +80,71 @@ find_package(CURL REQUIRED)
8080find_package (SQLiteCpp REQUIRED)
8181find_package (eventpp CONFIG REQUIRED)
8282
83+ ## Generating openapi json
8384file (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
101144add_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
106149target_include_directories (${TARGET_NAME} PRIVATE ${CMAKE_CURRENT_BINARY_DIR} )
107150
0 commit comments