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 }