diff options
| author | gingerBill <gingerBill@users.noreply.github.com> | 2024-03-06 14:56:19 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-03-06 14:56:19 +0000 |
| commit | c05a92ab3eb89c68beb5a12d2d5c8ec43202ace4 (patch) | |
| tree | 67ab23ba69f593bae7a708978b3a6ea2faa2a231 /core/encoding/json | |
| parent | 5789df5c0cea639e67a5584fb873f14a0461194d (diff) | |
| parent | b419615002e55e968c2caf2319df5044effc90c4 (diff) | |
Merge pull request #3215 from blob1807/json-better-enum-support
core:encoding/json Add support for writing enum value names
Diffstat (limited to 'core/encoding/json')
| -rw-r--r-- | core/encoding/json/marshal.odin | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/core/encoding/json/marshal.odin b/core/encoding/json/marshal.odin index 775f78748..f7ce7a120 100644 --- a/core/encoding/json/marshal.odin +++ b/core/encoding/json/marshal.odin @@ -51,6 +51,11 @@ Marshal_Options :: struct { // NOTE: This will temp allocate and sort a list for each map. sort_maps_by_key: bool, + // Output enum value's name instead of its underlying value. + // + // NOTE: If a name isn't found it'll use the underlying value. + use_enum_names: bool, + // Internal state indentation: int, mjson_skipped_first_braces_start: bool, @@ -411,7 +416,16 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err: } case runtime.Type_Info_Enum: - return marshal_to_writer(w, any{v.data, info.base.id}, opt) + if !opt.use_enum_names || len(info.names) == 0 { + return marshal_to_writer(w, any{v.data, info.base.id}, opt) + } else { + name, found := reflect.enum_name_from_value_any(v) + if found { + return marshal_to_writer(w, name, opt) + } else { + return marshal_to_writer(w, any{v.data, info.base.id}, opt) + } + } case runtime.Type_Info_Bit_Set: is_bit_set_different_endian_to_platform :: proc(ti: ^runtime.Type_Info) -> bool { |