|  | package main | 
|  |  | 
|  | import ( | 
|  | "flag" | 
|  | "fmt" | 
|  | "io" | 
|  | "io/ioutil" | 
|  | "os" | 
|  |  | 
|  | "github.com/pelletier/go-toml" | 
|  | ) | 
|  |  | 
|  | func main() { | 
|  | flag.Usage = func() { | 
|  | fmt.Fprintln(os.Stderr, `tomll can be used in two ways: | 
|  | Writing to STDIN and reading from STDOUT: | 
|  | cat file.toml | tomll > file.toml | 
|  |  | 
|  | Reading and updating a list of files: | 
|  | tomll a.toml b.toml c.toml | 
|  |  | 
|  | When given a list of files, tomll will modify all files in place without asking. | 
|  | `) | 
|  | } | 
|  | flag.Parse() | 
|  | // read from stdin and print to stdout | 
|  | if flag.NArg() == 0 { | 
|  | s, err := lintReader(os.Stdin) | 
|  | if err != nil { | 
|  | io.WriteString(os.Stderr, err.Error()) | 
|  | os.Exit(-1) | 
|  | } | 
|  | io.WriteString(os.Stdout, s) | 
|  | } else { | 
|  | // otherwise modify a list of files | 
|  | for _, filename := range flag.Args() { | 
|  | s, err := lintFile(filename) | 
|  | if err != nil { | 
|  | io.WriteString(os.Stderr, err.Error()) | 
|  | os.Exit(-1) | 
|  | } | 
|  | ioutil.WriteFile(filename, []byte(s), 0644) | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | func lintFile(filename string) (string, error) { | 
|  | tree, err := toml.LoadFile(filename) | 
|  | if err != nil { | 
|  | return "", err | 
|  | } | 
|  | return tree.String(), nil | 
|  | } | 
|  |  | 
|  | func lintReader(r io.Reader) (string, error) { | 
|  | tree, err := toml.LoadReader(r) | 
|  | if err != nil { | 
|  | return "", err | 
|  | } | 
|  | return tree.String(), nil | 
|  | } |