diff options
| author | gingerBill <bill@gingerbill.org> | 2024-04-10 13:29:10 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2024-04-10 13:29:10 +0100 |
| commit | d0dc7395e9d10fafc35e1b7af72c9601efd70080 (patch) | |
| tree | 0d9443d285fae9dcca1820ff711e98fec1238c9f /core/encoding | |
| parent | 97e2d8916a2b5018cdee15c5057edbbdcb9128d5 (diff) | |
Allow for comma-separate json names `json:"name,flag"`
Diffstat (limited to 'core/encoding')
| -rw-r--r-- | core/encoding/json/marshal.odin | 1 | ||||
| -rw-r--r-- | core/encoding/json/unmarshal.odin | 11 |
2 files changed, 11 insertions, 1 deletions
diff --git a/core/encoding/json/marshal.odin b/core/encoding/json/marshal.odin index 68d087a6e..6ec9c0d27 100644 --- a/core/encoding/json/marshal.odin +++ b/core/encoding/json/marshal.odin @@ -371,6 +371,7 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err: info := ti.variant.(runtime.Type_Info_Struct) for name, i in info.names { json_name := reflect.struct_tag_get(reflect.Struct_Tag(info.tags[i]), "json") + json_name = json_name_from_tag_value(json_name) opt_write_iteration(w, opt, i) or_return if json_name != "" { diff --git a/core/encoding/json/unmarshal.odin b/core/encoding/json/unmarshal.odin index edc4903a1..7a5679368 100644 --- a/core/encoding/json/unmarshal.odin +++ b/core/encoding/json/unmarshal.odin @@ -343,6 +343,15 @@ unmarshal_expect_token :: proc(p: ^Parser, kind: Token_Kind, loc := #caller_loca return prev } +@(private) +json_name_from_tag_value :: proc(value: string) -> (json_name: string) { + json_name = value + if comma_index := strings.index_byte(json_name, ','); comma_index >= 0 { + json_name = json_name[:comma_index] + } + return +} + @(private) unmarshal_object :: proc(p: ^Parser, v: any, end_token: Token_Kind) -> (err: Unmarshal_Error) { @@ -384,7 +393,7 @@ unmarshal_object :: proc(p: ^Parser, v: any, end_token: Token_Kind) -> (err: Unm for field, field_idx in fields { tag_value := string(reflect.struct_tag_get(field.tag, "json")) - if key == tag_value { + if key == json_name_from_tag_value(tag_value) { use_field_idx = field_idx break } |