1package main 2 3import ( 4 "flag" 5 "fmt" 6 "io" 7 "io/ioutil" 8 "os" 9 10 "github.com/pelletier/go-toml" 11) 12 13func main() { 14 flag.Usage = func() { 15 fmt.Fprintln(os.Stderr, `tomll can be used in two ways: 16Writing to STDIN and reading from STDOUT: 17 cat file.toml | tomll > file.toml 18 19Reading and updating a list of files: 20 tomll a.toml b.toml c.toml 21 22When given a list of files, tomll will modify all files in place without asking. 23`) 24 } 25 flag.Parse() 26 // read from stdin and print to stdout 27 if flag.NArg() == 0 { 28 s, err := lintReader(os.Stdin) 29 if err != nil { 30 io.WriteString(os.Stderr, err.Error()) 31 os.Exit(-1) 32 } 33 io.WriteString(os.Stdout, s) 34 } else { 35 // otherwise modify a list of files 36 for _, filename := range flag.Args() { 37 s, err := lintFile(filename) 38 if err != nil { 39 io.WriteString(os.Stderr, err.Error()) 40 os.Exit(-1) 41 } 42 ioutil.WriteFile(filename, []byte(s), 0644) 43 } 44 } 45} 46 47func lintFile(filename string) (string, error) { 48 tree, err := toml.LoadFile(filename) 49 if err != nil { 50 return "", err 51 } 52 return tree.String(), nil 53} 54 55func lintReader(r io.Reader) (string, error) { 56 tree, err := toml.LoadReader(r) 57 if err != nil { 58 return "", err 59 } 60 return tree.String(), nil 61} 62