(data: WriteBuffer, value: JsonValue)
| 512 | |
| 513 | |
| 514 | def write_json_value(data: WriteBuffer, value: JsonValue) -> None: |
| 515 | if value is None: |
| 516 | write_tag(data, LITERAL_NONE) |
| 517 | elif isinstance(value, bool): |
| 518 | write_bool(data, value) |
| 519 | elif isinstance(value, int): |
| 520 | write_tag(data, LITERAL_INT) |
| 521 | write_int_bare(data, value) |
| 522 | elif isinstance(value, str): |
| 523 | write_tag(data, LITERAL_STR) |
| 524 | write_str_bare(data, value) |
| 525 | elif isinstance(value, list): |
| 526 | write_tag(data, LIST_GEN) |
| 527 | write_int_bare(data, len(value)) |
| 528 | for val in value: |
| 529 | write_json_value(data, val) |
| 530 | elif isinstance(value, tuple): |
| 531 | write_tag(data, TUPLE_GEN) |
| 532 | write_int_bare(data, len(value)) |
| 533 | for val in value: |
| 534 | write_json_value(data, val) |
| 535 | elif isinstance(value, dict): |
| 536 | write_tag(data, DICT_STR_GEN) |
| 537 | write_int_bare(data, len(value)) |
| 538 | for key in sorted(value): |
| 539 | write_str_bare(data, key) |
| 540 | write_json_value(data, value[key]) |
| 541 | else: |
| 542 | assert False, f"Invalid JSON value: {value}" |
| 543 | |
| 544 | |
| 545 | # These are functions for JSON *dictionaries* specifically. Unfortunately, we |
no test coverage detected
searching dependent graphs…