...
1
2
3
4
5
6
7
8
9 package main
10
11 import (
12 "flag"
13 "fmt"
14 "io"
15 "log"
16 "os"
17
18 "golang.org/x/exp/trace/internal/raw"
19 "golang.org/x/exp/trace/internal/version"
20 )
21
22 func init() {
23 flag.Usage = func() {
24 fmt.Fprintf(flag.CommandLine.Output(), "Usage: %s [mode]\n", os.Args[0])
25 fmt.Fprintf(flag.CommandLine.Output(), "\n")
26 fmt.Fprintf(flag.CommandLine.Output(), "Supported modes:")
27 fmt.Fprintf(flag.CommandLine.Output(), "\n")
28 fmt.Fprintf(flag.CommandLine.Output(), "* text2bytes - converts a text format trace to bytes\n")
29 fmt.Fprintf(flag.CommandLine.Output(), "* bytes2text - converts a byte format trace to text\n")
30 fmt.Fprintf(flag.CommandLine.Output(), "\n")
31 flag.PrintDefaults()
32 }
33 log.SetFlags(0)
34 }
35
36 func main() {
37 flag.Parse()
38 if narg := flag.NArg(); narg != 1 {
39 log.Fatal("expected exactly one positional argument: the mode to operate in; see -h output")
40 }
41
42 r := os.Stdin
43 w := os.Stdout
44
45 var tr traceReader
46 var tw traceWriter
47 var err error
48
49 switch flag.Arg(0) {
50 case "text2bytes":
51 tr, err = raw.NewTextReader(r)
52 if err != nil {
53 log.Fatal(err)
54 }
55 tw, err = raw.NewWriter(w, tr.Version())
56 if err != nil {
57 log.Fatal(err)
58 }
59 case "bytes2text":
60 tr, err = raw.NewReader(r)
61 if err != nil {
62 log.Fatal(err)
63 }
64 tw, err = raw.NewTextWriter(w, tr.Version())
65 if err != nil {
66 log.Fatal(err)
67 }
68 }
69 for {
70 ev, err := tr.ReadEvent()
71 if err == io.EOF {
72 break
73 }
74 if err != nil {
75 log.Fatal(err)
76 }
77 if err := tw.WriteEvent(ev); err != nil {
78 log.Fatal(err)
79 }
80 }
81 }
82
83 type traceReader interface {
84 Version() version.Version
85 ReadEvent() (raw.Event, error)
86 }
87
88 type traceWriter interface {
89 WriteEvent(raw.Event) error
90 }
91
View as plain text