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