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  }