| 488 | |
| 489 | |
| 490 | def read_json_value(data: ReadBuffer) -> JsonValue: |
| 491 | tag = read_tag(data) |
| 492 | if tag == LITERAL_NONE: |
| 493 | return None |
| 494 | if tag == LITERAL_FALSE: |
| 495 | return False |
| 496 | if tag == LITERAL_TRUE: |
| 497 | return True |
| 498 | if tag == LITERAL_INT: |
| 499 | return read_int_bare(data) |
| 500 | if tag == LITERAL_STR: |
| 501 | return read_str_bare(data) |
| 502 | if tag == LIST_GEN: |
| 503 | size = read_int_bare(data) |
| 504 | return [read_json_value(data) for _ in range(size)] |
| 505 | if tag == TUPLE_GEN: |
| 506 | size = read_int_bare(data) |
| 507 | return tuple(read_json_value(data) for _ in range(size)) |
| 508 | if tag == DICT_STR_GEN: |
| 509 | size = read_int_bare(data) |
| 510 | return {read_str_bare(data): read_json_value(data) for _ in range(size)} |
| 511 | assert False, f"Invalid JSON tag: {tag}" |
| 512 | |
| 513 | |
| 514 | def write_json_value(data: WriteBuffer, value: JsonValue) -> None: |