62 lines
1.0 KiB
Go
62 lines
1.0 KiB
Go
// Command tomlv validates TOML documents and prints each key's type.
|
|
package main
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"path"
|
|
"strings"
|
|
"text/tabwriter"
|
|
|
|
"github.com/BurntSushi/toml"
|
|
)
|
|
|
|
var (
|
|
flagTypes = false
|
|
)
|
|
|
|
func init() {
|
|
log.SetFlags(0)
|
|
|
|
flag.BoolVar(&flagTypes, "types", flagTypes,
|
|
"When set, the types of every defined key will be shown.")
|
|
|
|
flag.Usage = usage
|
|
flag.Parse()
|
|
}
|
|
|
|
func usage() {
|
|
log.Printf("Usage: %s toml-file [ toml-file ... ]\n",
|
|
path.Base(os.Args[0]))
|
|
flag.PrintDefaults()
|
|
|
|
os.Exit(1)
|
|
}
|
|
|
|
func main() {
|
|
if flag.NArg() < 1 {
|
|
flag.Usage()
|
|
}
|
|
for _, f := range flag.Args() {
|
|
var tmp interface{}
|
|
md, err := toml.DecodeFile(f, &tmp)
|
|
if err != nil {
|
|
log.Fatalf("Error in '%s': %s", f, err)
|
|
}
|
|
if flagTypes {
|
|
printTypes(md)
|
|
}
|
|
}
|
|
}
|
|
|
|
func printTypes(md toml.MetaData) {
|
|
tabw := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0)
|
|
for _, key := range md.Keys() {
|
|
fmt.Fprintf(tabw, "%s%s\t%s\n",
|
|
strings.Repeat(" ", len(key)-1), key, md.Type(key...))
|
|
}
|
|
tabw.Flush()
|
|
}
|