github.com/benma/gogen@v0.0.0-20160826115606-cf49914b915a/cmd/gounmarshalmap/main.go (about)

     1  package main
     2  
     3  import (
     4  	"bytes"
     5  	"flag"
     6  	"fmt"
     7  	"io/ioutil"
     8  	"log"
     9  	"strings"
    10  
    11  	"github.com/ernesto-jimenez/gogen/unmarshalmap"
    12  )
    13  
    14  var (
    15  	out  = flag.String("o", "", "what file to write")
    16  	tOut = flag.String("o-test", "", "what file to write the test to")
    17  	pkg  = flag.String("pkg", ".", "what package to get the interface from")
    18  )
    19  
    20  func main() {
    21  	flag.Parse()
    22  	log.SetFlags(0)
    23  
    24  	st := flag.Arg(0)
    25  
    26  	if st == "" {
    27  		log.Fatal("need to specify a struct name")
    28  	}
    29  
    30  	gen, err := unmarshalmap.NewGenerator(*pkg, st)
    31  	if err != nil {
    32  		log.Fatal(err)
    33  	}
    34  
    35  	var buf bytes.Buffer
    36  
    37  	log.Printf("Generating func (*%s) UnmarshalMap(map[string]interface{}) error", st)
    38  	err = gen.Write(&buf)
    39  	if err != nil {
    40  		log.Fatal(err)
    41  	}
    42  
    43  	if *out != "" {
    44  		err := ioutil.WriteFile(*out, buf.Bytes(), 0666)
    45  		if err != nil {
    46  			log.Fatal(err)
    47  		}
    48  		if *tOut == "" {
    49  			*tOut = fmt.Sprintf("%s_test.go", strings.TrimRight(*out, ".go"))
    50  		}
    51  	} else {
    52  		fmt.Println(buf.String())
    53  	}
    54  
    55  	buf.Reset()
    56  
    57  	err = gen.WriteTest(&buf)
    58  	if err != nil {
    59  		log.Fatal(err)
    60  	}
    61  
    62  	if *tOut != "" {
    63  		err := ioutil.WriteFile(*tOut, buf.Bytes(), 0666)
    64  		if err != nil {
    65  			log.Fatal(err)
    66  		}
    67  	} else {
    68  		fmt.Println(buf.String())
    69  	}
    70  }