v2 / vlib / toml / to / to.v
134 lines · 127 sloc · 2.37 KB · 58a3b6f56a43444feffe35dd64d72d104fbfb07c
Raw
1// Copyright (c) 2021 Lars Pontoppidan. All rights reserved.
2// Use of this source code is governed by an MIT license
3// that can be found in the LICENSE file.
4module to
5
6import toml
7import x.json2
8
9type DocOrAny = toml.Any | toml.Doc
10
11// json returns `doa` as a JSON encoded string.
12pub fn json(doa DocOrAny) string {
13 match doa {
14 toml.Doc {
15 return doa.ast.table.str()
16 }
17 toml.Any {
18 return any_to_json(doa)
19 }
20 }
21}
22
23// json returns `a` as a JSON encoded string.
24fn any_to_json(a toml.Any) string {
25 match a {
26 toml.Null {
27 return 'null'
28 }
29 toml.DateTime {
30 return json2.Any(toml.Any(a).string()).json_str()
31 }
32 toml.Date {
33 return json2.Any(toml.Any(a).string()).json_str()
34 }
35 toml.Time {
36 return json2.Any(toml.Any(a).string()).json_str()
37 }
38 string {
39 return json2.Any(toml.Any(a).string()).json_str()
40 }
41 bool {
42 return json2.Any(toml.Any(a).bool()).json_str()
43 }
44 f32 {
45 return json2.Any(toml.Any(a).f32()).json_str()
46 }
47 f64 {
48 return json2.Any(toml.Any(a).f64()).json_str()
49 }
50 i64 {
51 return json2.Any(toml.Any(a).i64()).json_str()
52 }
53 int {
54 return json2.Any(toml.Any(a).int()).json_str()
55 }
56 u64 {
57 return json2.Any(toml.Any(a).u64()).json_str()
58 }
59 map[string]toml.Any {
60 mut str := '{'
61 for key, val in a {
62 json_key := json2.Any(key)
63 str += ' ${json_key.json_str()}: ${any_to_json(val)},'
64 }
65 str = str.trim_right(',')
66 str += ' }'
67 return str
68 }
69 []toml.Any {
70 mut str := '['
71 for val in a {
72 str += ' ${any_to_json(val)},'
73 }
74 str = str.trim_right(',')
75 str += ' ]'
76 return str
77 }
78 }
79}
80
81// json_any returns `Any` as a `x.json2.Any` type.
82pub fn json_any(a toml.Any) json2.Any {
83 match a {
84 toml.Null {
85 return json2.Null{}
86 }
87 toml.DateTime {
88 return json2.Any(a.str())
89 }
90 toml.Date {
91 return json2.Any(a.str())
92 }
93 toml.Time {
94 return json2.Any(a.str())
95 }
96 string {
97 return json2.Any(a.str())
98 }
99 bool {
100 return json2.Any(bool(a))
101 }
102 int {
103 return json2.Any(int(a))
104 }
105 f32 {
106 return json2.Any(f32(a))
107 }
108 f64 {
109 return json2.Any(f64(a))
110 }
111 i64 {
112 return json2.Any(i64(a))
113 }
114 u64 {
115 return json2.Any(u64(a))
116 }
117 map[string]toml.Any {
118 mut jmap := map[string]json2.Any{}
119 for key, val in a {
120 jmap[key] = json_any(val)
121 }
122 return jmap
123 }
124 []toml.Any {
125 mut jarr := []json2.Any{}
126
127 for val in a {
128 jarr << json_any(val)
129 }
130
131 return jarr
132 }
133 }
134}
135