You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.4 KiB
65 lines
1.4 KiB
5 years ago
|
package main
|
||
|
|
||
|
import (
|
||
|
"encoding/gob"
|
||
|
"flag"
|
||
|
"fmt"
|
||
|
"os"
|
||
|
"path"
|
||
|
"reflect"
|
||
|
|
||
|
"github.com/golang/mock/mockgen/model"
|
||
|
|
||
|
pkg_ "github.com/ethereum/go-ethereum/log"
|
||
|
)
|
||
|
|
||
|
var output = flag.String("output", "", "The output file name, or empty to use stdout.")
|
||
|
|
||
|
func main() {
|
||
|
flag.Parse()
|
||
|
|
||
|
its := []struct {
|
||
|
sym string
|
||
|
typ reflect.Type
|
||
|
}{
|
||
|
|
||
|
{"Handler", reflect.TypeOf((*pkg_.Handler)(nil)).Elem()},
|
||
|
}
|
||
|
pkg := &model.Package{
|
||
|
// NOTE: This behaves contrary to documented behaviour if the
|
||
|
// package name is not the final component of the import path.
|
||
|
// The reflect package doesn't expose the package name, though.
|
||
|
Name: path.Base("github.com/ethereum/go-ethereum/log"),
|
||
|
}
|
||
|
|
||
|
for _, it := range its {
|
||
|
intf, err := model.InterfaceFromInterfaceType(it.typ)
|
||
|
if err != nil {
|
||
|
fmt.Fprintf(os.Stderr, "Reflection: %v\n", err)
|
||
|
os.Exit(1)
|
||
|
}
|
||
|
intf.Name = it.sym
|
||
|
pkg.Interfaces = append(pkg.Interfaces, intf)
|
||
|
}
|
||
|
|
||
|
outfile := os.Stdout
|
||
|
if len(*output) != 0 {
|
||
|
var err error
|
||
|
outfile, err = os.Create(*output)
|
||
|
if err != nil {
|
||
|
fmt.Fprintf(os.Stderr, "failed to open output file %q", *output)
|
||
|
}
|
||
|
defer func() {
|
||
|
if err := outfile.Close(); err != nil {
|
||
|
fmt.Fprintf(os.Stderr, "failed to close output file %q", *output)
|
||
|
os.Exit(1)
|
||
|
}
|
||
|
}()
|
||
|
}
|
||
|
|
||
|
if err := gob.NewEncoder(outfile).Encode(pkg); err != nil {
|
||
|
fmt.Fprintf(os.Stderr, "gob encode: %v\n", err)
|
||
|
os.Exit(1)
|
||
|
}
|
||
|
}
|