github.com/go-generalize/volcago@v1.7.0/generator/generator.go (about) 1 package generator 2 3 import ( 4 "strings" 5 6 "github.com/go-generalize/go-easyparser" 7 "github.com/go-generalize/go-easyparser/types" 8 "golang.org/x/xerrors" 9 ) 10 11 // Generator generates firestore CRUD functions 12 type Generator struct { 13 dir string 14 types map[string]types.Type 15 16 AppVersion string 17 } 18 19 func NewGenerator(dir string) (*Generator, error) { 20 psr, err := easyparser.NewParser(dir, func(fo *easyparser.FilterOpt) bool { 21 return fo.BasePackage 22 }) 23 24 if err != nil { 25 return nil, xerrors.Errorf("failed to initialize parser: %w", err) 26 } 27 psr.Replacer = replacer 28 29 types, err := psr.Parse() 30 31 if err != nil { 32 return nil, xerrors.Errorf("failed to parse: %w", err) 33 } 34 35 return &Generator{ 36 dir: dir, 37 types: types, 38 39 AppVersion: "devel", 40 }, nil 41 } 42 43 // GenerateOption is a parameter to generate repository 44 type GenerateOption struct { 45 OutputDir string 46 PackageName string 47 CollectionName string 48 MockGenPath string 49 MockOutputPath string 50 DisableMetaFieldsDetection bool 51 Subcollection bool 52 } 53 54 // NewDefaultGenerateOption returns a default GenerateOption 55 func NewDefaultGenerateOption() GenerateOption { 56 return GenerateOption{ 57 OutputDir: ".", 58 MockGenPath: "mockgen", 59 MockOutputPath: "mock/mock_{{ .GeneratedFileName }}/mock_{{ .GeneratedFileName }}.go", 60 DisableMetaFieldsDetection: false, 61 } 62 } 63 64 func (g *Generator) Generate(structName string, opt GenerateOption) error { 65 var typ *types.Object 66 for k, v := range g.types { 67 split := strings.Split(k, ".") 68 t := split[len(split)-1] 69 70 if t == structName { 71 t, ok := v.(*types.Object) 72 73 if !ok { 74 return xerrors.Errorf("Only struct is allowed") 75 } 76 typ = t 77 } 78 } 79 80 if typ == nil { 81 return xerrors.Errorf("struct not found: %s", structName) 82 } 83 84 gen, err := newStructGenerator(typ, structName, g.AppVersion, opt) 85 86 if err != nil { 87 return xerrors.Errorf("failed to initialize generator: %w", err) 88 } 89 90 if err := gen.parseType(); err != nil { 91 return xerrors.Errorf("failed to parse type: %w", err) 92 } 93 94 if err := gen.generate(); err != nil { 95 return xerrors.Errorf("failed to generate files: %w", err) 96 } 97 98 return nil 99 }