github.com/chrislusf/greenpack@v3.7.1-0.20170911073826-ad5bd10b7c47+incompatible/parse/save.go (about) 1 package parse 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "fmt" 7 "io" 8 "os" 9 10 //"github.com/tinylib/msgp/msgp" 11 "github.com/glycerine/greenpack/msgp" 12 ) 13 14 func (fs *FileSet) SaveMsgpackFile(parsedPath, path string) error { 15 //fmt.Printf("\n saveMsgpackFile saving to: '%v'", path) 16 17 var f *os.File 18 var err error 19 if path == "-" { 20 f = os.Stdout 21 } else { 22 f, err = os.Create(path) 23 if err != nil { 24 return err 25 } 26 } 27 defer f.Close() 28 w := msgp.NewWriter(f) 29 defer w.Flush() 30 31 tr, err := TranslateToGreenSchema(parsedPath, fs) 32 if err != nil { 33 return err 34 } 35 err = tr.EncodeMsg(w) 36 if err != nil { 37 return err 38 } 39 if path != "-" { 40 by, err := tr.MarshalMsg(nil) 41 if err != nil { 42 return err 43 } 44 fjson, err := os.Create(path + ".json") 45 if err != nil { 46 return err 47 } 48 defer fjson.Close() 49 50 // and write out pretty json version too. 51 buf := bytes.NewBuffer(by) 52 var compactJson, pretty bytes.Buffer 53 _, err = msgp.CopyToJSON(&compactJson, buf) 54 if err != nil { 55 return err 56 } 57 58 err = json.Indent(&pretty, compactJson.Bytes(), "", " ") 59 if err != nil { 60 return err 61 } 62 _, err = io.Copy(fjson, &pretty) 63 fmt.Fprintf(fjson, "\n") 64 return err 65 } 66 return nil 67 }