forked from fraenky8/tables-to-go
-
Notifications
You must be signed in to change notification settings - Fork 0
/
tables-to-go.go
95 lines (72 loc) · 3.68 KB
/
tables-to-go.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
91
92
93
94
95
package main
import (
"flag"
"fmt"
"os"
"github.com/fraenky8/tables-to-go/internal/cli"
"github.com/fraenky8/tables-to-go/pkg/database"
"github.com/fraenky8/tables-to-go/pkg/output"
"github.com/fraenky8/tables-to-go/pkg/settings"
)
// CmdArgs represents the supported command line args
type CmdArgs struct {
Help bool
*settings.Settings
}
// NewCmdArgs creates and prepares the command line arguments with default values
func NewCmdArgs() (args *CmdArgs) {
args = &CmdArgs{
Settings: settings.New(),
}
flag.BoolVar(&args.Help, "?", false, "shows help and usage")
flag.BoolVar(&args.Help, "help", false, "shows help and usage")
flag.BoolVar(&args.Verbose, "v", args.Verbose, "verbose output")
flag.BoolVar(&args.VVerbose, "vv", args.VVerbose, "more verbose output")
flag.BoolVar(&args.Force, "f", args.Force, "force; skip tables that encounter errors")
flag.Var(&args.DbType, "t", fmt.Sprintf("type of database to use, currently supported: %v", settings.SprintfSupportedDbTypes()))
flag.StringVar(&args.User, "u", args.User, "user to connect to the database")
flag.StringVar(&args.Pswd, "p", args.Pswd, "password of user")
flag.StringVar(&args.DbName, "d", args.DbName, "database name")
flag.StringVar(&args.Schema, "s", args.Schema, "schema name")
flag.StringVar(&args.Host, "h", args.Host, "host of database")
flag.StringVar(&args.Port, "port", args.Port, "port of database host, if not specified, it will be the default ports for the supported databases")
flag.StringVar(&args.Socket, "socket", args.Socket, "The socket file to use for connection. If specified, takes precedence over host:port.")
flag.StringVar(&args.OutputFilePath, "of", args.OutputFilePath, "output file path, default is current working directory")
flag.Var(&args.OutputFormat, "format", "format of struct fields (columns): camelCase (c) or original (o)")
flag.Var(&args.FileNameFormat, "fn-format", "format of the filename: camelCase (c, default) or snake_case (s)")
flag.StringVar(&args.Prefix, "pre", args.Prefix, "prefix for file- and struct names")
flag.StringVar(&args.Suffix, "suf", args.Suffix, "suffix for file- and struct names")
flag.StringVar(&args.PackageName, "pn", args.PackageName, "package name")
flag.Var(&args.Null, "null", "representation of NULL columns: sql.Null* (sql) or primitive pointers (native|primitive)")
flag.BoolVar(&args.NoInitialism, "no-initialism", args.NoInitialism, "disable the conversion to upper-case words in column names")
flag.BoolVar(&args.TagsNoDb, "tags-no-db", args.TagsNoDb, "do not create db-tags")
flag.BoolVar(&args.TagsMastermindStructable, "tags-structable", args.TagsMastermindStructable, "generate struct with tags for use in Masterminds/structable (https://github.com/Masterminds/structable)")
flag.BoolVar(&args.TagsMastermindStructableOnly, "tags-structable-only", args.TagsMastermindStructableOnly, "generate struct with tags ONLY for use in Masterminds/structable (https://github.com/Masterminds/structable)")
flag.BoolVar(&args.IsMastermindStructableRecorder, "structable-recorder", args.IsMastermindStructableRecorder, "generate a structable.Recorder field")
// disable the print of usage when an error occurs
flag.CommandLine.Usage = func() {}
flag.Parse()
return args
}
// main function to run the transformations
func main() {
cmdArgs := NewCmdArgs()
if cmdArgs.Help {
flag.Usage()
os.Exit(0)
}
if err := cmdArgs.Verify(); err != nil {
fmt.Print(err)
os.Exit(1)
}
db := database.New(cmdArgs.Settings)
if err := db.Connect(); err != nil {
fmt.Println(err)
os.Exit(1)
}
writer := output.NewFileWriter(cmdArgs.OutputFilePath)
if err := cli.Run(cmdArgs.Settings, db, writer); err != nil {
fmt.Printf("run error: %v\n", err)
os.Exit(1)
}
}