-
Notifications
You must be signed in to change notification settings - Fork 2
/
main.go
83 lines (69 loc) · 1.48 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
package main
import (
"flag"
"fmt"
"os"
zglob "github.com/mattn/go-zglob"
"github.com/sqlabble/sqlabble/cmd/sqlabble/generator"
)
func main() {
if err := _main(); err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(2)
}
}
func _main() error {
op, files, err := Parse(os.Args)
if err != nil {
return err
}
for _, file := range files {
if err := generator.ConvertFile(file, op); err != nil {
return err
}
}
return nil
}
func Parse(args []string) (generator.Options, []string, error) {
op := generator.Options{}
fs := flag.NewFlagSet("sqlabble", flag.ExitOnError)
fs.Usage = func() {
name := args[0]
fmt.Fprintf(os.Stderr, `%s is a code generation tool that implements a method that returns a table or column to a struct.
Usage:
%s [flags] [glob]
Flags:
`, name, name)
fs.PrintDefaults()
fmt.Fprintf(os.Stderr, `
Examples:
%s ./*.go
%s ./**/*.go
%s -suffix _gen ./**/*.go
`, name, name, name)
}
fs.StringVar(&op.Suffix, "suffix", "_sqlabble", "suffix of the file to be generated")
if err := fs.Parse(args[1:]); err != nil {
return op, nil, err
}
patterns := fs.Args()
if len(patterns) == 0 {
patterns = []string{"./*.go"}
}
files, err := Globs(patterns)
if err != nil {
return op, nil, err
}
return op, files, nil
}
func Globs(patterns []string) ([]string, error) {
pathes := []string{}
for _, p := range patterns {
ps, err := zglob.Glob(p)
if err != nil {
return nil, err
}
pathes = append(pathes, ps...)
}
return pathes, nil
}