]>
Commit | Line | Data |
---|---|---|
825bde18 FM |
1 | """Produce API swagger YAML and JSON representations usable from C.""" |
2 | ||
3 | import json | |
4 | import sys | |
5 | ||
6 | import yaml | |
7 | ||
8 | ||
9 | def dump_hex(contents, array_name, string_name): | |
10 | """Dump the hex contents to stdout.""" | |
11 | array = "static const unsigned char {0}[] = {{" | |
12 | string = "static const std::string {0}{{(const char*){1}, sizeof({1})}};" | |
13 | close_array = "};" | |
14 | ||
15 | print(array.format(array_name)) | |
16 | for index, byte in enumerate(contents.encode()): | |
17 | if (index + 1) % 15 == 0: | |
18 | print() | |
19 | print(f"{byte:#x}", end=", ") | |
20 | print() | |
21 | print(close_array) | |
22 | ||
23 | print() | |
24 | print(string.format(string_name, array_name)) | |
25 | ||
26 | ||
27 | yaml_filename = sys.argv[1] | |
28 | ||
29 | with open(yaml_filename, mode="r", encoding="utf-8") as f_in: | |
30 | yaml_contents = f_in.read() | |
31 | contents = yaml.safe_load(yaml_contents) | |
32 | json_contents = json.dumps(contents, indent=2, separators=(",", ": ")) | |
33 | ||
34 | header = "#pragma once\n#include <string>" | |
35 | print(header) | |
36 | print() | |
37 | ||
38 | dump_hex(yaml_contents, "api_swagger_yamlData", "g_api_swagger_yaml") | |
39 | print() | |
40 | print("// -----------------------------------------------------------") | |
41 | print() | |
42 | dump_hex(json_contents, "api_swagger_jsonData", "g_api_swagger_json") |