add json tag support
This commit is contained in:
parent
d375d06267
commit
ba65c2ab0c
1 changed files with 28 additions and 6 deletions
|
|
@ -6,6 +6,7 @@ import (
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"slices"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
_ "github.com/go-sql-driver/mysql"
|
_ "github.com/go-sql-driver/mysql"
|
||||||
|
|
@ -17,6 +18,7 @@ import (
|
||||||
postgresgen "github.com/go-jet/jet/v2/generator/postgres"
|
postgresgen "github.com/go-jet/jet/v2/generator/postgres"
|
||||||
sqlitegen "github.com/go-jet/jet/v2/generator/sqlite"
|
sqlitegen "github.com/go-jet/jet/v2/generator/sqlite"
|
||||||
"github.com/go-jet/jet/v2/generator/template"
|
"github.com/go-jet/jet/v2/generator/template"
|
||||||
|
"github.com/go-jet/jet/v2/internal/3rdparty/snaker"
|
||||||
"github.com/go-jet/jet/v2/internal/jet"
|
"github.com/go-jet/jet/v2/internal/jet"
|
||||||
"github.com/go-jet/jet/v2/internal/utils/errfmt"
|
"github.com/go-jet/jet/v2/internal/utils/errfmt"
|
||||||
"github.com/go-jet/jet/v2/internal/utils/strslice"
|
"github.com/go-jet/jet/v2/internal/utils/strslice"
|
||||||
|
|
@ -54,10 +56,12 @@ var (
|
||||||
tables string
|
tables string
|
||||||
views string
|
views string
|
||||||
enums string
|
enums string
|
||||||
|
|
||||||
|
modelJsonTag string
|
||||||
)
|
)
|
||||||
|
|
||||||
type templateFilter struct {
|
type templateFilter struct {
|
||||||
names []string
|
names []string
|
||||||
ignore bool
|
ignore bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -93,6 +97,7 @@ func init() {
|
||||||
flag.StringVar(&tablePkg, "rel-table-path", "table", "Relative path for the Table files package from the destination directory.")
|
flag.StringVar(&tablePkg, "rel-table-path", "table", "Relative path for the Table files package from the destination directory.")
|
||||||
flag.StringVar(&viewPkg, "rel-view-path", "view", "Relative path for the View files package from the destination directory.")
|
flag.StringVar(&viewPkg, "rel-view-path", "view", "Relative path for the View files package from the destination directory.")
|
||||||
flag.StringVar(&enumPkg, "rel-enum-path", "enum", "Relative path for the Enum files package from the destination directory.")
|
flag.StringVar(&enumPkg, "rel-enum-path", "enum", "Relative path for the Enum files package from the destination directory.")
|
||||||
|
flag.StringVar(&modelJsonTag, "model-json-tag", "", "Json tag model to be included in Go structs. (optional)(default <empty>)(allowed values: <empty>, pascal-case, camel-case, snake-case")
|
||||||
|
|
||||||
flag.StringVar(&tables, "tables", "", `Comma-separated list of tables to generate.`)
|
flag.StringVar(&tables, "tables", "", `Comma-separated list of tables to generate.`)
|
||||||
flag.StringVar(&views, "views", "", `Comma-separated list of views to generate.`)
|
flag.StringVar(&views, "views", "", `Comma-separated list of views to generate.`)
|
||||||
|
|
@ -107,6 +112,10 @@ func main() {
|
||||||
printErrorAndExit("ERROR: required flag(s) missing")
|
printErrorAndExit("ERROR: required flag(s) missing")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !slices.Contains([]string{"", "snake-case", "pascal-case", "camel-case"}, modelJsonTag) {
|
||||||
|
printErrorAndExit("ERROR: json tag does not contain correct value")
|
||||||
|
}
|
||||||
|
|
||||||
source := getSource()
|
source := getSource()
|
||||||
tablesFilter := createTemplateFilter(ignoreTables, tables, "tables")
|
tablesFilter := createTemplateFilter(ignoreTables, tables, "tables")
|
||||||
viewsFilter := createTemplateFilter(ignoreViews, views, "views")
|
viewsFilter := createTemplateFilter(ignoreViews, views, "views")
|
||||||
|
|
@ -259,8 +268,6 @@ func parseList(list string) []string {
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
func genTemplate(dialect jet.Dialect, tablesFilter, viewsFilter, enumsFilter templateFilter) template.Template {
|
func genTemplate(dialect jet.Dialect, tablesFilter, viewsFilter, enumsFilter templateFilter) template.Template {
|
||||||
return template.Default(dialect).
|
return template.Default(dialect).
|
||||||
UseSchema(func(schemaMetaData metadata.Schema) template.Schema {
|
UseSchema(func(schemaMetaData metadata.Schema) template.Schema {
|
||||||
|
|
@ -270,7 +277,22 @@ func genTemplate(dialect jet.Dialect, tablesFilter, viewsFilter, enumsFilter tem
|
||||||
if shouldSkipTable(table, tablesFilter) {
|
if shouldSkipTable(table, tablesFilter) {
|
||||||
return template.TableModel{Skip: true}
|
return template.TableModel{Skip: true}
|
||||||
}
|
}
|
||||||
return template.DefaultTableModel(table)
|
return template.DefaultTableModel(table).
|
||||||
|
UseField(func(columnMetaData metadata.Column) template.TableModelField {
|
||||||
|
defaultTableModelField := template.DefaultTableModelField(columnMetaData)
|
||||||
|
|
||||||
|
var tags []string
|
||||||
|
switch modelJsonTag {
|
||||||
|
case "snake-case":
|
||||||
|
tags = append(tags, fmt.Sprintf(`json:"%s"`, columnMetaData.Name))
|
||||||
|
case "camel-case":
|
||||||
|
tags = append(tags, fmt.Sprintf(`json:"%s"`, snaker.SnakeToCamel(columnMetaData.Name, false)))
|
||||||
|
case "pascal-case":
|
||||||
|
tags = append(tags, fmt.Sprintf(`json:"%s"`, snaker.SnakeToCamel(columnMetaData.Name, true)))
|
||||||
|
}
|
||||||
|
|
||||||
|
return defaultTableModelField.UseTags(tags...)
|
||||||
|
})
|
||||||
}).
|
}).
|
||||||
UseView(func(view metadata.Table) template.ViewModel {
|
UseView(func(view metadata.Table) template.ViewModel {
|
||||||
if shouldSkipTable(view, viewsFilter) {
|
if shouldSkipTable(view, viewsFilter) {
|
||||||
|
|
@ -318,13 +340,13 @@ func createTemplateFilter(ignoreList, allowList, filterType string) templateFilt
|
||||||
|
|
||||||
if allowList != "" {
|
if allowList != "" {
|
||||||
return templateFilter{
|
return templateFilter{
|
||||||
names: parseList(allowList),
|
names: parseList(allowList),
|
||||||
ignore: false,
|
ignore: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return templateFilter{
|
return templateFilter{
|
||||||
names: parseList(ignoreList),
|
names: parseList(ignoreList),
|
||||||
ignore: true,
|
ignore: true,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue