forked from golang/exp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
90 lines (78 loc) · 1.88 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
// Copyright 2023 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Code generated by "gen.bash" from internal/trace/v2; DO NOT EDIT.
//go:build go1.21
package main
import (
"flag"
"fmt"
"io"
"log"
"os"
"github.com/fromelicks/exp/trace/internal/raw"
"github.com/fromelicks/exp/trace/internal/version"
)
func init() {
flag.Usage = func() {
fmt.Fprintf(flag.CommandLine.Output(), "Usage: %s [mode]\n", os.Args[0])
fmt.Fprintf(flag.CommandLine.Output(), "\n")
fmt.Fprintf(flag.CommandLine.Output(), "Supported modes:")
fmt.Fprintf(flag.CommandLine.Output(), "\n")
fmt.Fprintf(flag.CommandLine.Output(), "* text2bytes - converts a text format trace to bytes\n")
fmt.Fprintf(flag.CommandLine.Output(), "* bytes2text - converts a byte format trace to text\n")
fmt.Fprintf(flag.CommandLine.Output(), "\n")
flag.PrintDefaults()
}
log.SetFlags(0)
}
func main() {
flag.Parse()
if narg := flag.NArg(); narg != 1 {
log.Fatal("expected exactly one positional argument: the mode to operate in; see -h output")
}
r := os.Stdin
w := os.Stdout
var tr traceReader
var tw traceWriter
var err error
switch flag.Arg(0) {
case "text2bytes":
tr, err = raw.NewTextReader(r)
if err != nil {
log.Fatal(err)
}
tw, err = raw.NewWriter(w, tr.Version())
if err != nil {
log.Fatal(err)
}
case "bytes2text":
tr, err = raw.NewReader(r)
if err != nil {
log.Fatal(err)
}
tw, err = raw.NewTextWriter(w, tr.Version())
if err != nil {
log.Fatal(err)
}
}
for {
ev, err := tr.ReadEvent()
if err == io.EOF {
break
}
if err != nil {
log.Fatal(err)
}
if err := tw.WriteEvent(ev); err != nil {
log.Fatal(err)
}
}
}
type traceReader interface {
Version() version.Version
ReadEvent() (raw.Event, error)
}
type traceWriter interface {
WriteEvent(raw.Event) error
}