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  }