mirror of
https://github.com/odin-lang/Odin.git
synced 2026-01-21 12:00:35 +00:00
Merge pull request #6081 from dozn/json5-and-sjson-comments
Add JSON5/SJSON Comments When Marshalling
This commit is contained in:
@@ -414,6 +414,12 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err:
|
||||
|
||||
opt_write_iteration(w, opt, first_iteration) or_return
|
||||
first_iteration = false
|
||||
|
||||
if opt.pretty {
|
||||
comment := reflect.struct_tag_get(reflect.Struct_Tag(info.tags[i]), "jsoncomment")
|
||||
opt_write_comment(w, opt, &comment) or_return
|
||||
}
|
||||
|
||||
if json_name != "" {
|
||||
opt_write_key(w, opt, json_name) or_return
|
||||
} else {
|
||||
@@ -533,6 +539,26 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err:
|
||||
return
|
||||
}
|
||||
|
||||
// Newlines are split into multiple comment lines
|
||||
opt_write_comment :: proc(w: io.Writer, opt: ^Marshal_Options, comment: ^string) -> (err: io.Error) {
|
||||
if comment^ == "" {
|
||||
return nil
|
||||
}
|
||||
|
||||
switch opt.spec {
|
||||
case .JSON5, .MJSON:
|
||||
for line in strings.split_iterator(comment, "\n") {
|
||||
io.write_string(w, "// ") or_return
|
||||
io.write_string(w, line) or_return
|
||||
io.write_rune(w, '\n') or_return
|
||||
opt_write_indentation(w, opt) or_return
|
||||
}
|
||||
case .JSON: return nil
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// write key as quoted string or with optional quotes in mjson
|
||||
opt_write_key :: proc(w: io.Writer, opt: ^Marshal_Options, name: string) -> (err: io.Error) {
|
||||
switch opt.spec {
|
||||
|
||||
Reference in New Issue
Block a user