Generate a C++ header file with all types.
(self)
| 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("") |
no test coverage detected