|
6 | 6 | "errors" |
7 | 7 | "flag" |
8 | 8 | "fmt" |
| 9 | + "io" |
9 | 10 | "log" |
10 | 11 | "os" |
11 | 12 | "path" |
@@ -38,32 +39,49 @@ func usage() { |
38 | 39 | } |
39 | 40 |
|
40 | 41 | func main() { |
41 | | - if flag.NArg() < 1 { |
42 | | - flag.Usage() |
| 42 | + if flag.NArg() < 1 || flag.Args()[0] == "-" { |
| 43 | + read("-", os.Stdin) |
| 44 | + return |
43 | 45 | } |
| 46 | + |
44 | 47 | for _, f := range flag.Args() { |
45 | | - var tmp any |
46 | | - start := time.Now() |
47 | | - md, err := toml.DecodeFile(f, &tmp) |
| 48 | + fp, err := os.Open(f) |
48 | 49 | if err != nil { |
49 | | - var perr toml.ParseError |
50 | | - if errors.As(err, &perr) { |
51 | | - log.Fatalf("Error in '%s': %s", f, perr.ErrorWithPosition()) |
52 | | - } |
53 | | - log.Fatalf("Error in '%s': %s", f, err) |
54 | | - } |
55 | | - if flagTime { |
56 | | - fmt.Printf("%f\n", time.Since(start).Seconds()) |
57 | | - } |
58 | | - if flagTypes { |
59 | | - printTypes(md) |
| 50 | + log.Fatalf("reading %q: %s", f, err) |
60 | 51 | } |
61 | | - if flagJSON { |
62 | | - enc := json.NewEncoder(os.Stdout) |
63 | | - enc.SetEscapeHTML(false) |
64 | | - enc.SetIndent("", " ") |
65 | | - enc.Encode(tmp) |
| 52 | + read(f, fp) |
| 53 | + fp.Close() |
| 54 | + } |
| 55 | +} |
| 56 | + |
| 57 | +func read(f string, fp io.Reader) { |
| 58 | + // Read data first so -time doesn't include the time it took to read. |
| 59 | + d, err := io.ReadAll(fp) |
| 60 | + if err != nil { |
| 61 | + log.Fatalf("Error in '%s': %s", f, err) |
| 62 | + } |
| 63 | + |
| 64 | + var tmp any |
| 65 | + start := time.Now() |
| 66 | + md, err := toml.Decode(string(d), &tmp) |
| 67 | + if err != nil { |
| 68 | + var perr toml.ParseError |
| 69 | + if errors.As(err, &perr) { |
| 70 | + log.Fatalf("Error in '%s': %s", f, perr.ErrorWithPosition()) |
66 | 71 | } |
| 72 | + log.Fatalf("Error in '%s': %s", f, err) |
| 73 | + } |
| 74 | + if flagTime { |
| 75 | + fmt.Printf("%f\n", time.Since(start).Seconds()) |
| 76 | + } |
| 77 | + if flagTypes { |
| 78 | + printTypes(md) |
| 79 | + } |
| 80 | + if flagJSON { |
| 81 | + enc := json.NewEncoder(os.Stdout) |
| 82 | + enc.SetEscapeHTML(false) |
| 83 | + enc.SetIndent("", " ") |
| 84 | + enc.Encode(tmp) |
67 | 85 | } |
68 | 86 | } |
69 | 87 |
|
|
0 commit comments