@@ -25,8 +25,6 @@ const (
2525 parseCommentPrefix = `//`
2626)
2727
28- var replacementNames = map [string ]string {}
29-
3028// Generator is responsible for generating validation files for the given in a go source file.
3129type Generator struct {
3230 Version string
@@ -56,6 +54,7 @@ type Generator struct {
5654 forceUpper bool
5755 noComments bool
5856 buildTags []string
57+ replacementNames map [string ]string
5958}
6059
6160// Enum holds data for a discovered enum in the parsed source
@@ -90,6 +89,7 @@ func NewGenerator() *Generator {
9089 t : template .New ("generator" ),
9190 fileSet : token .NewFileSet (),
9291 noPrefix : false ,
92+ replacementNames : map [string ]string {},
9393 }
9494
9595 funcs := sprig .TxtFuncMap ()
@@ -224,30 +224,35 @@ func (g *Generator) WithBuildTags(tags ...string) *Generator {
224224 return g
225225}
226226
227+ // WithAliases will set up aliases for the generator.
228+ func (g * Generator ) WithAliases (aliases map [string ]string ) * Generator {
229+ if aliases == nil {
230+ return g
231+ }
232+ g .replacementNames = aliases
233+ return g
234+ }
235+
227236func (g * Generator ) anySQLEnabled () bool {
228237 return g .sql || g .sqlNullStr || g .sqlint || g .sqlNullInt
229238}
230239
231240// ParseAliases is used to add aliases to replace during name sanitization.
232- func ParseAliases (aliases []string ) error {
241+ func ParseAliases (aliases []string ) ( map [ string ] string , error ) {
233242 aliasMap := map [string ]string {}
234243
235244 for _ , str := range aliases {
236245 kvps := strings .Split (str , "," )
237246 for _ , kvp := range kvps {
238247 parts := strings .Split (kvp , ":" )
239248 if len (parts ) != 2 {
240- return fmt .Errorf ("invalid formatted alias entry %q, must be in the format \" key:value\" " , kvp )
249+ return nil , fmt .Errorf ("invalid formatted alias entry %q, must be in the format \" key:value\" " , kvp )
241250 }
242251 aliasMap [parts [0 ]] = parts [1 ]
243252 }
244253 }
245254
246- for k , v := range aliasMap {
247- replacementNames [k ] = v
248- }
249-
250- return nil
255+ return aliasMap , nil
251256}
252257
253258// WithTemplates is used to provide the filenames of additional templates.
@@ -438,23 +443,23 @@ func (g *Generator) parseEnum(ts *ast.TypeSpec) (*Enum, error) {
438443 valueStr = dataVal
439444 rawName = value [:equalIndex ]
440445 if enum .Type == "string" {
441- if parsed , err := strconv .ParseInt (dataVal , 10 , 64 ); err == nil {
446+ if parsed , err := strconv .ParseInt (dataVal , 0 , 64 ); err == nil {
442447 data = parsed
443448 valueStr = rawName
444449 }
445450 if isQuoted (dataVal ) {
446451 valueStr = trimQuotes (dataVal )
447452 }
448453 } else if unsigned {
449- newData , err := strconv .ParseUint (dataVal , 10 , 64 )
454+ newData , err := strconv .ParseUint (dataVal , 0 , 64 )
450455 if err != nil {
451456 err = fmt .Errorf ("failed parsing the data part of enum value '%s': %w" , value , err )
452457 fmt .Println (err )
453458 return nil , err
454459 }
455460 data = newData
456461 } else {
457- newData , err := strconv .ParseInt (dataVal , 10 , 64 )
462+ newData , err := strconv .ParseInt (dataVal , 0 , 64 )
458463 if err != nil {
459464 err = fmt .Errorf ("failed parsing the data part of enum value '%s': %w" , value , err )
460465 fmt .Println (err )
@@ -473,7 +478,7 @@ func (g *Generator) parseEnum(ts *ast.TypeSpec) (*Enum, error) {
473478 prefixedName := name
474479 if name != skipHolder {
475480 prefixedName = enum .Prefix + name
476- prefixedName = sanitizeValue (prefixedName )
481+ prefixedName = g . sanitizeValue (prefixedName )
477482 if ! g .leaveSnakeCase {
478483 prefixedName = snakeToCamelCase (prefixedName )
479484 }
@@ -526,14 +531,14 @@ func unescapeComment(comment string) string {
526531// identifier syntax as described here: https://golang.org/ref/spec#Identifiers
527532// identifier = letter { letter | unicode_digit }
528533// where letter can be unicode_letter or '_'
529- func sanitizeValue (value string ) string {
534+ func ( g * Generator ) sanitizeValue (value string ) string {
530535 // Keep skip value holders
531536 if value == skipHolder {
532537 return skipHolder
533538 }
534539
535540 replacedValue := value
536- for k , v := range replacementNames {
541+ for k , v := range g . replacementNames {
537542 replacedValue = strings .ReplaceAll (replacedValue , k , v )
538543 }
539544
0 commit comments