MCPcopy Create free account
hub / github.com/apache/fory / generate_header

Method generate_header

compiler/fory_compiler/generators/cpp.py:233–361  ·  view source on GitHub ↗

Generate a C++ header file with all types.

(self)

Source from the content-addressed store, hash-verified

231 return lines
232
233 def generate_header(self) -> GeneratedFile:
234 """Generate a C++ header file with all types."""
235 lines = []
236 includes: Set[str] = set()
237 enum_macros: List[str] = []
238 union_macros: List[str] = []
239 evolving_macros: List[str] = []
240 definition_items = self.get_definition_order()
241
242 # Collect includes (including from nested types)
243 includes.add("<cstdint>")
244 includes.add("<memory>")
245 includes.add("<string>")
246 includes.add("<unordered_map>")
247 includes.add("<vector>")
248 includes.add("<utility>")
249 includes.add('"fory/serialization/fory.h"')
250 if self.schema_has_unions():
251 includes.add("<utility>")
252 includes.add("<variant>")
253 includes.add("<memory>")
254 includes.add("<typeindex>")
255 includes.add('"fory/serialization/union_serializer.h"')
256 if self.schema.source_file:
257 base_dir = Path(self.schema.source_file).resolve().parent
258 for imp in self.schema.imports:
259 candidate = (base_dir / imp.path).resolve()
260 schema = self._load_schema(str(candidate))
261 if schema is None:
262 continue
263 includes.add(f'"{self._header_for_schema(schema)}"')
264
265 for message in self.schema.messages:
266 if self.is_imported_type(message):
267 continue
268 self.collect_message_includes(message, includes)
269 for union in self.schema.unions:
270 if self.is_imported_type(union):
271 continue
272 self.collect_union_includes(union, includes)
273
274 # License header
275 lines.append("/*")
276 for line in self.get_license_header(" *").split("\n"):
277 lines.append(line)
278 lines.append(" */")
279 lines.append("")
280
281 # Header guard
282 guard_name = f"{self.get_header_name().upper()}_H_"
283 lines.append(f"#ifndef {guard_name}")
284 lines.append(f"#define {guard_name}")
285 lines.append("")
286
287 # Includes
288 for inc in sorted(includes):
289 lines.append(f"#include {inc}")
290 lines.append("")

Callers 1

generateMethod · 0.95

Calls 15

get_definition_orderMethod · 0.95
schema_has_unionsMethod · 0.95
_load_schemaMethod · 0.95
_header_for_schemaMethod · 0.95
is_imported_typeMethod · 0.95
get_header_nameMethod · 0.95
get_namespaceMethod · 0.95
generate_enum_macroMethod · 0.95

Tested by

no test coverage detected