forked from funny/link
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathchannel_gen.go
80 lines (67 loc) · 1.92 KB
/
channel_gen.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
// +build ignore
package main
import (
"bytes"
"flag"
"log"
"os"
"os/exec"
)
func main() {
flag.Parse()
gofmt := os.Getenv("GOROOT") + "/bin/gofmt"
log.Print("use 'gofmt' at ", gofmt)
var cmdErr bytes.Buffer
var cmd1Out bytes.Buffer
var cmd2Out bytes.Buffer
var cmd3Out bytes.Buffer
log.Print("gofmt -r 'Channel -> " + flag.Arg(0) + "'")
cmd1 := exec.Command(gofmt, "-r", "Channel -> "+flag.Arg(0), "channel.go")
cmd1.Stdout = &cmd1Out
cmd1.Stderr = &cmdErr
if err := cmd1.Run(); err != nil {
log.Fatal(cmdErr.String())
}
log.Print("gofmt -r 'NewChannel -> New" + flag.Arg(0) + "'")
cmd2 := exec.Command(gofmt, "-r", "NewChannel -> New"+flag.Arg(0))
cmd2.Stdin = &cmd1Out
cmd2.Stdout = &cmd2Out
cmd2.Stderr = &cmdErr
if err := cmd2.Run(); err != nil {
log.Fatal(cmdErr.String())
}
log.Print("gofmt -r 'KEY -> " + flag.Arg(1) + "'")
cmd3 := exec.Command(gofmt, "-r", "KEY -> "+flag.Arg(1))
cmd3.Stdin = &cmd2Out
cmd3.Stdout = &cmd3Out
cmd3.Stderr = &cmdErr
if err := cmd3.Run(); err != nil {
log.Fatal(cmdErr.String())
}
cmd3Out.ReadBytes('\n') // ignore build
cmd3Out.ReadBytes('\n') // empty line
cmd3Out.ReadBytes('\n') // Int32Channel
cmd3Out.ReadBytes('\n') // Uint32Channel
cmd3Out.ReadBytes('\n') // Int64Channel
cmd3Out.ReadBytes('\n') // Uint64Channel
cmd3Out.ReadBytes('\n') // StringChannel
log.Print("save to target file '", flag.Arg(2), "'")
file, err := os.Create(flag.Arg(2))
if err != nil {
log.Fatal(err)
}
defer file.Close()
if _, err := file.WriteString(
"// DO NOT EDIT\n// GENERATE BY 'go run channel_gen.go " +
flag.Arg(0) + " " + flag.Arg(1) + " " + flag.Arg(2) + "'\n"); err != nil {
log.Fatal(err)
}
var code = cmd3Out.Bytes()
if len(flag.Args()) > 3 {
log.Print("rename package as '" + flag.Arg(3) + "'")
code = bytes.Replace(code, []byte("package link"), []byte("package "+flag.Arg(3)), 1)
}
if _, err := file.Write(code); err != nil {
log.Fatal(err)
}
}