Skip to content

Commit dd0e726

Browse files
committed
cmd/zon: Peek at first byte
(In order to decide on what decoder to pick)
1 parent 91ca4ea commit dd0e726

1 file changed

Lines changed: 17 additions & 2 deletions

File tree

cmd/zon/main.go

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package main
22

33
import (
4+
"bufio"
5+
"bytes"
46
"encoding/json"
57
"flag"
68
"fmt"
@@ -23,16 +25,29 @@ func run(r io.Reader, w io.Writer) error {
2325

2426
flag.Parse()
2527

28+
b := bufio.NewReader(r)
29+
30+
var dec Decoder = json.NewDecoder(b)
31+
{
32+
first, err := b.Peek(1)
33+
if err != nil {
34+
return err
35+
}
36+
37+
if probablyZON := bytes.Equal([]byte("."), first); probablyZON {
38+
dec = zon.NewDecoder(b)
39+
}
40+
}
41+
2642
if *j {
27-
dec := zon.NewDecoder(r)
2843
enc := json.NewEncoder(w)
2944

3045
enc.SetIndent("", *i)
3146

3247
return convert(dec, enc)
3348
}
3449

35-
return convert(json.NewDecoder(r), zon.NewEncoder(w, zon.Indent(*i)))
50+
return convert(dec, zon.NewEncoder(w, zon.Indent(*i)))
3651
}
3752

3853
type Decoder interface{ Decode(v any) error }

0 commit comments

Comments
 (0)