mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
toml: small refactor, move all json functionality to submodule (#12502)
This commit is contained in:
137
vlib/toml/to/to.v
Normal file
137
vlib/toml/to/to.v
Normal file
@@ -0,0 +1,137 @@
|
||||
// Copyright (c) 2021 Lars Pontoppidan. All rights reserved.
|
||||
// Use of this source code is governed by an MIT license
|
||||
// that can be found in the LICENSE file.
|
||||
module to
|
||||
|
||||
import toml
|
||||
import x.json2
|
||||
|
||||
type DocOrAny = toml.Any | toml.Doc
|
||||
|
||||
// json returns `doa` as a JSON encoded string.
|
||||
pub fn json(doa DocOrAny) string {
|
||||
match doa {
|
||||
toml.Doc {
|
||||
return any_to_json(doa.ast_to_any(doa.ast.table))
|
||||
}
|
||||
toml.Any {
|
||||
return any_to_json(doa)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// json returns `a` as a JSON encoded string.
|
||||
fn any_to_json(a toml.Any) string {
|
||||
match a {
|
||||
toml.Null {
|
||||
return 'null'
|
||||
}
|
||||
toml.DateTime {
|
||||
json_text := json2.Any(a.str())
|
||||
return '"$json_text.json_str()"'
|
||||
}
|
||||
toml.Date {
|
||||
json_text := json2.Any(a.str())
|
||||
return '"$json_text.json_str()"'
|
||||
}
|
||||
toml.Time {
|
||||
json_text := json2.Any(a.str())
|
||||
return '"$json_text.json_str()"'
|
||||
}
|
||||
string {
|
||||
return '"' + json2.Any(a.str()).json_str() + '"'
|
||||
}
|
||||
bool {
|
||||
return json2.Any(bool(a)).json_str()
|
||||
}
|
||||
f32 {
|
||||
return json2.Any(f32(a)).json_str()
|
||||
}
|
||||
f64 {
|
||||
return json2.Any(f64(a)).json_str()
|
||||
}
|
||||
i64 {
|
||||
return json2.Any(i64(a)).json_str()
|
||||
}
|
||||
int {
|
||||
return json2.Any(int(a)).json_str()
|
||||
}
|
||||
u64 {
|
||||
return json2.Any(u64(a)).json_str()
|
||||
}
|
||||
map[string]toml.Any {
|
||||
mut str := '{'
|
||||
for key, val in a {
|
||||
json_key := json2.Any(key)
|
||||
str += ' "$json_key.json_str()": ${any_to_json(val)},'
|
||||
}
|
||||
str = str.trim_right(',')
|
||||
str += ' }'
|
||||
return str
|
||||
}
|
||||
[]toml.Any {
|
||||
mut str := '['
|
||||
for val in a {
|
||||
str += ' ${any_to_json(val)},'
|
||||
}
|
||||
str = str.trim_right(',')
|
||||
str += ' ]'
|
||||
return str
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// json_any returns `Any` as a `x.json2.Any` type.
|
||||
pub fn json_any(a toml.Any) json2.Any {
|
||||
match a {
|
||||
toml.Null {
|
||||
return json2.Null{}
|
||||
}
|
||||
toml.DateTime {
|
||||
return json2.Any(a.str())
|
||||
}
|
||||
toml.Date {
|
||||
return json2.Any(a.str())
|
||||
}
|
||||
toml.Time {
|
||||
return json2.Any(a.str())
|
||||
}
|
||||
string {
|
||||
return json2.Any(a.str())
|
||||
}
|
||||
bool {
|
||||
return json2.Any(bool(a))
|
||||
}
|
||||
int {
|
||||
return json2.Any(int(a))
|
||||
}
|
||||
f32 {
|
||||
return json2.Any(f32(a))
|
||||
}
|
||||
f64 {
|
||||
return json2.Any(f64(a))
|
||||
}
|
||||
i64 {
|
||||
return json2.Any(i64(a))
|
||||
}
|
||||
u64 {
|
||||
return json2.Any(u64(a))
|
||||
}
|
||||
map[string]toml.Any {
|
||||
mut jmap := map[string]json2.Any{}
|
||||
for key, val in a {
|
||||
jmap[key] = json_any(val)
|
||||
}
|
||||
return jmap
|
||||
}
|
||||
[]toml.Any {
|
||||
mut jarr := []json2.Any{}
|
||||
|
||||
for val in a {
|
||||
jarr << json_any(val)
|
||||
}
|
||||
|
||||
return jarr
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user