1 package mxj
2
3 import (
4 "fmt"
5 "io"
6 "os"
7 )
8
9 type Maps []Map
10
11 func NewMaps() Maps {
12 return make(Maps, 0)
13 }
14
15 type MapRaw struct {
16 M Map
17 R []byte
18 }
19
20
21 func NewMapsFromJsonFile(name string) (Maps, error) {
22 fi, err := os.Stat(name)
23 if err != nil {
24 return nil, err
25 }
26 if !fi.Mode().IsRegular() {
27 return nil, fmt.Errorf("file %s is not a regular file", name)
28 }
29
30 fh, err := os.Open(name)
31 if err != nil {
32 return nil, err
33 }
34 defer fh.Close()
35
36 am := make([]Map, 0)
37 for {
38 m, raw, err := NewMapJsonReaderRaw(fh)
39 if err != nil && err != io.EOF {
40 return am, fmt.Errorf("error: %s - reading: %s", err.Error(), string(raw))
41 }
42 if len(m) > 0 {
43 am = append(am, m)
44 }
45 if err == io.EOF {
46 break
47 }
48 }
49 return am, nil
50 }
51
52
53 func NewMapsFromJsonFileRaw(name string) ([]MapRaw, error) {
54 fi, err := os.Stat(name)
55 if err != nil {
56 return nil, err
57 }
58 if !fi.Mode().IsRegular() {
59 return nil, fmt.Errorf("file %s is not a regular file", name)
60 }
61
62 fh, err := os.Open(name)
63 if err != nil {
64 return nil, err
65 }
66 defer fh.Close()
67
68 am := make([]MapRaw, 0)
69 for {
70 mr := new(MapRaw)
71 mr.M, mr.R, err = NewMapJsonReaderRaw(fh)
72 if err != nil && err != io.EOF {
73 return am, fmt.Errorf("error: %s - reading: %s", err.Error(), string(mr.R))
74 }
75 if len(mr.M) > 0 {
76 am = append(am, *mr)
77 }
78 if err == io.EOF {
79 break
80 }
81 }
82 return am, nil
83 }
84
85
86 func NewMapsFromXmlFile(name string) (Maps, error) {
87 fi, err := os.Stat(name)
88 if err != nil {
89 return nil, err
90 }
91 if !fi.Mode().IsRegular() {
92 return nil, fmt.Errorf("file %s is not a regular file", name)
93 }
94
95 fh, err := os.Open(name)
96 if err != nil {
97 return nil, err
98 }
99 defer fh.Close()
100
101 am := make([]Map, 0)
102 for {
103 m, raw, err := NewMapXmlReaderRaw(fh)
104 if err != nil && err != io.EOF {
105 return am, fmt.Errorf("error: %s - reading: %s", err.Error(), string(raw))
106 }
107 if len(m) > 0 {
108 am = append(am, m)
109 }
110 if err == io.EOF {
111 break
112 }
113 }
114 return am, nil
115 }
116
117
118
119
120 func NewMapsFromXmlFileRaw(name string) ([]MapRaw, error) {
121 fi, err := os.Stat(name)
122 if err != nil {
123 return nil, err
124 }
125 if !fi.Mode().IsRegular() {
126 return nil, fmt.Errorf("file %s is not a regular file", name)
127 }
128
129 fh, err := os.Open(name)
130 if err != nil {
131 return nil, err
132 }
133 defer fh.Close()
134
135 am := make([]MapRaw, 0)
136 for {
137 mr := new(MapRaw)
138 mr.M, mr.R, err = NewMapXmlReaderRaw(fh)
139 if err != nil && err != io.EOF {
140 return am, fmt.Errorf("error: %s - reading: %s", err.Error(), string(mr.R))
141 }
142 if len(mr.M) > 0 {
143 am = append(am, *mr)
144 }
145 if err == io.EOF {
146 break
147 }
148 }
149 return am, nil
150 }
151
152
153
154
155
156 func (mvs Maps) JsonString(safeEncoding ...bool) (string, error) {
157 var s string
158 for _, v := range mvs {
159 j, err := v.Json()
160 if err != nil {
161 return s, err
162 }
163 s += string(j)
164 }
165 return s, nil
166 }
167
168
169 func (mvs Maps) JsonStringIndent(prefix, indent string, safeEncoding ...bool) (string, error) {
170 var s string
171 var haveFirst bool
172 for _, v := range mvs {
173 j, err := v.JsonIndent(prefix, indent)
174 if err != nil {
175 return s, err
176 }
177 if haveFirst {
178 s += "\n"
179 } else {
180 haveFirst = true
181 }
182 s += string(j)
183 }
184 return s, nil
185 }
186
187
188 func (mvs Maps) XmlString() (string, error) {
189 var s string
190 for _, v := range mvs {
191 x, err := v.Xml()
192 if err != nil {
193 return s, err
194 }
195 s += string(x)
196 }
197 return s, nil
198 }
199
200
201 func (mvs Maps) XmlStringIndent(prefix, indent string) (string, error) {
202 var s string
203 for _, v := range mvs {
204 x, err := v.XmlIndent(prefix, indent)
205 if err != nil {
206 return s, err
207 }
208 s += string(x)
209 }
210 return s, nil
211 }
212
213
214
215
216 func (mvs Maps) JsonFile(file string, safeEncoding ...bool) error {
217 var encoding bool
218 if len(safeEncoding) == 1 {
219 encoding = safeEncoding[0]
220 }
221 s, err := mvs.JsonString(encoding)
222 if err != nil {
223 return err
224 }
225 fh, err := os.Create(file)
226 if err != nil {
227 return err
228 }
229 defer fh.Close()
230 fh.WriteString(s)
231 return nil
232 }
233
234
235
236
237 func (mvs Maps) JsonFileIndent(file, prefix, indent string, safeEncoding ...bool) error {
238 var encoding bool
239 if len(safeEncoding) == 1 {
240 encoding = safeEncoding[0]
241 }
242 s, err := mvs.JsonStringIndent(prefix, indent, encoding)
243 if err != nil {
244 return err
245 }
246 fh, err := os.Create(file)
247 if err != nil {
248 return err
249 }
250 defer fh.Close()
251 fh.WriteString(s)
252 return nil
253 }
254
255
256
257
258 func (mvs Maps) XmlFile(file string) error {
259 s, err := mvs.XmlString()
260 if err != nil {
261 return err
262 }
263 fh, err := os.Create(file)
264 if err != nil {
265 return err
266 }
267 defer fh.Close()
268 fh.WriteString(s)
269 return nil
270 }
271
272
273
274
275 func (mvs Maps) XmlFileIndent(file, prefix, indent string) error {
276 s, err := mvs.XmlStringIndent(prefix, indent)
277 if err != nil {
278 return err
279 }
280 fh, err := os.Create(file)
281 if err != nil {
282 return err
283 }
284 defer fh.Close()
285 fh.WriteString(s)
286 return nil
287 }
288
View as plain text