go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers/os/resources/plist/plist.go (about) 1 // Copyright (c) Mondoo, Inc. 2 // SPDX-License-Identifier: BUSL-1.1 3 4 package plist 5 6 import ( 7 "bytes" 8 "encoding/json" 9 "io" 10 11 "howett.net/plist" 12 ) 13 14 func ToXml(r io.ReadSeeker) ([]byte, error) { 15 // convert file format to xml 16 var val interface{} 17 dec := plist.NewDecoder(r) 18 err := dec.Decode(&val) 19 if err != nil { 20 return nil, err 21 } 22 23 out := &bytes.Buffer{} 24 enc := plist.NewEncoderForFormat(out, plist.XMLFormat) 25 err = enc.Encode(val) 26 return out.Bytes(), err 27 } 28 29 func Decode(r io.ReadSeeker) (map[string]interface{}, error) { 30 var data map[string]interface{} 31 decoder := plist.NewDecoder(r) 32 err := decoder.Decode(&data) 33 if err != nil { 34 return nil, err 35 } 36 37 // NOTE: we need to do the extra conversion here to make sure we use supported 38 // values by our dict structure: string, float64, int64 39 // plist also uses uint64 heavily which we do not support 40 // TODO: we really do not want to use the poor-man's json conversion version 41 jsondata, err := json.Marshal(data) 42 if err != nil { 43 return nil, err 44 } 45 46 var dataJson map[string]interface{} 47 err = json.Unmarshal(jsondata, &dataJson) 48 if err != nil { 49 return nil, err 50 } 51 52 return dataJson, nil 53 }