aboutsummaryrefslogtreecommitdiff
path: root/core/encoding
diff options
context:
space:
mode:
Diffstat (limited to 'core/encoding')
-rw-r--r--core/encoding/json/marshal.odin16
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 {