main.NewCmdArgs   A
last analyzed

Complexity

Conditions 2

Size

Total Lines 43
Code Lines 30

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 30
nop 0
dl 0
loc 43
rs 9.16
c 0
b 0
f 0
1
package main
2
3
import (
4
	"flag"
5
	"fmt"
6
	"os"
7
8
	"github.com/fraenky8/tables-to-go/internal/cli"
9
	"github.com/fraenky8/tables-to-go/pkg/database"
10
	"github.com/fraenky8/tables-to-go/pkg/output"
11
	"github.com/fraenky8/tables-to-go/pkg/settings"
12
)
13
14
// CmdArgs represents the supported command line args
15
type CmdArgs struct {
16
	Help bool
17
	*settings.Settings
18
}
19
20
// NewCmdArgs creates and prepares the command line arguments with default values
21
func NewCmdArgs() (args *CmdArgs) {
22
23
	args = &CmdArgs{
24
		Settings: settings.New(),
25
	}
26
27
	flag.BoolVar(&args.Help, "?", false, "shows help and usage")
28
	flag.BoolVar(&args.Help, "help", false, "shows help and usage")
29
	flag.BoolVar(&args.Verbose, "v", args.Verbose, "verbose output")
30
	flag.BoolVar(&args.VVerbose, "vv", args.VVerbose, "more verbose output")
31
	flag.BoolVar(&args.Force, "f", args.Force, "force; skip tables that encounter errors")
32
33
	flag.Var(&args.DbType, "t", fmt.Sprintf("type of database to use, currently supported: %v", settings.SprintfSupportedDbTypes()))
34
	flag.StringVar(&args.User, "u", args.User, "user to connect to the database")
35
	flag.StringVar(&args.Pswd, "p", args.Pswd, "password of user")
36
	flag.StringVar(&args.DbName, "d", args.DbName, "database name")
37
	flag.StringVar(&args.Schema, "s", args.Schema, "schema name")
38
	flag.StringVar(&args.Host, "h", args.Host, "host of database")
39
	flag.StringVar(&args.Port, "port", args.Port, "port of database host, if not specified, it will be the default ports for the supported databases")
40
41
	flag.StringVar(&args.OutputFilePath, "of", args.OutputFilePath, "output file path, default is current working directory")
42
	flag.Var(&args.OutputFormat, "format", "format of struct fields (columns): camelCase (c) or original (o)")
43
44
	flag.Var(&args.FileNameFormat, "fn-format", "format of the filename: camelCase (c, default) or snake_case (s)")
45
	flag.StringVar(&args.Prefix, "pre", args.Prefix, "prefix for file- and struct names")
46
	flag.StringVar(&args.Suffix, "suf", args.Suffix, "suffix for file- and struct names")
47
	flag.StringVar(&args.PackageName, "pn", args.PackageName, "package name")
48
	flag.Var(&args.Null, "null", "representation of NULL columns: sql.Null* (sql) or primitive pointers (native|primitive)")
49
50
	flag.BoolVar(&args.NoInitialism, "no-initialism", args.NoInitialism, "disable the conversion to upper-case words in column names")
51
52
	flag.BoolVar(&args.TagsNoDb, "tags-no-db", args.TagsNoDb, "do not create db-tags")
53
54
	flag.BoolVar(&args.TagsMastermindStructable, "tags-structable", args.TagsMastermindStructable, "generate struct with tags for use in Masterminds/structable (https://github.com/Masterminds/structable)")
55
	flag.BoolVar(&args.TagsMastermindStructableOnly, "tags-structable-only", args.TagsMastermindStructableOnly, "generate struct with tags ONLY for use in Masterminds/structable (https://github.com/Masterminds/structable)")
56
	flag.BoolVar(&args.IsMastermindStructableRecorder, "structable-recorder", args.IsMastermindStructableRecorder, "generate a structable.Recorder field")
57
58
	// disable the print of usage when an error occurs
59
	flag.CommandLine.Usage = func() {}
60
61
	flag.Parse()
62
63
	return args
64
}
65
66
// main function to run the transformations
67
func main() {
68
69
	cmdArgs := NewCmdArgs()
70
71
	if cmdArgs.Help {
72
		flag.Usage()
73
		os.Exit(0)
74
	}
75
76
	if err := cmdArgs.Verify(); err != nil {
77
		fmt.Print(err)
78
		os.Exit(1)
79
	}
80
81
	db := database.New(cmdArgs.Settings)
82
83
	if err := db.Connect(); err != nil {
84
		fmt.Println(err)
85
		os.Exit(1)
86
	}
87
88
	writer := output.NewFileWriter(cmdArgs.OutputFilePath)
89
90
	if err := cli.Run(cmdArgs.Settings, db, writer); err != nil {
91
		fmt.Printf("run error: %v\n", err)
92
		os.Exit(1)
93
	}
94
}
95