main.go 992 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. "log"
  6. "os"
  7. "path"
  8. "strings"
  9. "text/tabwriter"
  10. "github.com/coreos/etcd/third_party/github.com/BurntSushi/toml"
  11. )
  12. var (
  13. flagTypes = false
  14. )
  15. func init() {
  16. log.SetFlags(0)
  17. flag.BoolVar(&flagTypes, "types", flagTypes,
  18. "When set, the types of every defined key will be shown.")
  19. flag.Usage = usage
  20. flag.Parse()
  21. }
  22. func usage() {
  23. log.Printf("Usage: %s toml-file [ toml-file ... ]\n",
  24. path.Base(os.Args[0]))
  25. flag.PrintDefaults()
  26. os.Exit(1)
  27. }
  28. func main() {
  29. if flag.NArg() < 1 {
  30. flag.Usage()
  31. }
  32. for _, f := range flag.Args() {
  33. var tmp interface{}
  34. md, err := toml.DecodeFile(f, &tmp)
  35. if err != nil {
  36. log.Fatalf("Error in '%s': %s", f, err)
  37. }
  38. if flagTypes {
  39. printTypes(md)
  40. }
  41. }
  42. }
  43. func printTypes(md toml.MetaData) {
  44. tabw := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0)
  45. for _, key := range md.Keys() {
  46. fmt.Fprintf(tabw, "%s%s\t%s\n",
  47. strings.Repeat(" ", len(key)-1), key, md.Type(key...))
  48. }
  49. tabw.Flush()
  50. }