github.com/rancher/moq@v0.0.0-20200712062324-13d1f37d2d77/main.go (about) 1 package main 2 3 import ( 4 "bytes" 5 "errors" 6 "flag" 7 "fmt" 8 "io" 9 "io/ioutil" 10 "os" 11 "path/filepath" 12 13 "github.com/matryer/moq/pkg/moq" 14 ) 15 16 type userFlags struct { 17 outFile string 18 pkgName string 19 formatter string 20 args []string 21 } 22 23 func main() { 24 var flags userFlags 25 flag.StringVar(&flags.outFile, "out", "", "output file (default stdout)") 26 flag.StringVar(&flags.pkgName, "pkg", "", "package name (default will infer)") 27 flag.StringVar(&flags.formatter, "fmt", "", "go pretty-printer: gofmt (default) or goimports") 28 29 flag.Usage = func() { 30 fmt.Println(`moq [flags] source-dir interface [interface2 [interface3 [...]]]`) 31 flag.PrintDefaults() 32 fmt.Println(`Specifying an alias for the mock is also supported with the format 'interface:alias'`) 33 fmt.Println(`Ex: moq -pkg different . MyInterface:MyMock`) 34 } 35 36 flag.Parse() 37 flags.args = flag.Args() 38 39 if err := run(flags); err != nil { 40 fmt.Fprintln(os.Stderr, err) 41 flag.Usage() 42 os.Exit(1) 43 } 44 } 45 46 func run(flags userFlags) error { 47 if len(flags.args) < 2 { 48 return errors.New("not enough arguments") 49 } 50 51 var buf bytes.Buffer 52 var out io.Writer = os.Stdout 53 if flags.outFile != "" { 54 out = &buf 55 } 56 57 srcDir, args := flags.args[0], flags.args[1:] 58 m, err := moq.New(moq.Config{ 59 SrcDir: srcDir, 60 PkgName: flags.pkgName, 61 Formatter: flags.formatter, 62 }) 63 if err != nil { 64 return err 65 } 66 67 if err = m.Mock(out, args...); err != nil { 68 return err 69 } 70 71 if flags.outFile == "" { 72 return nil 73 } 74 75 // create the file 76 err = os.MkdirAll(filepath.Dir(flags.outFile), 0755) 77 if err != nil { 78 return err 79 } 80 81 return ioutil.WriteFile(flags.outFile, buf.Bytes(), 0644) 82 }