github.com/Cloud-Foundations/Dominator@v0.3.4/lib/json/write.go (about)

     1  package json
     2  
     3  import (
     4  	"bufio"
     5  	"encoding/json"
     6  	"io"
     7  	"os"
     8  )
     9  
    10  func writeToFile(filename string, perm os.FileMode, indent string,
    11  	value interface{}) error {
    12  	tmpFilename := filename + "~"
    13  	file, err := os.OpenFile(tmpFilename, os.O_CREATE|os.O_TRUNC|os.O_WRONLY,
    14  		perm)
    15  	if err != nil {
    16  		return err
    17  	}
    18  	defer os.Remove(tmpFilename)
    19  	writer := bufio.NewWriter(file)
    20  	if err := writeWithIndent(writer, indent, value); err != nil {
    21  		return err
    22  	}
    23  	if err := writer.Flush(); err != nil {
    24  		return err
    25  	}
    26  	if err := file.Close(); err != nil {
    27  		return err
    28  	}
    29  	return os.Rename(tmpFilename, filename)
    30  }
    31  
    32  func writeWithIndent(w io.Writer, indent string, value interface{}) error {
    33  	encoder := json.NewEncoder(w)
    34  	encoder.SetIndent("", indent)
    35  	return encoder.Encode(value)
    36  }