// Copyright 2014 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // Package bind implements a code generator for gobind. // // See the documentation on the gobind command for usage details // and the list of currently supported types. // (http://godoc.org/golang.org/x/mobile/cmd/gobind) package bind // import "golang.org/x/mobile/bind" // TODO(crawshaw): slice support // TODO(crawshaw): channel support import ( "bytes" "go/format" "go/token" "go/types" "io" ) type ( GeneratorConfig struct { Writer io.Writer Fset *token.FileSet Pkg *types.Package AllPkg []*types.Package } fileType int ) // GenGo generates a Go stub to support foreign language APIs. func GenGo(conf *GeneratorConfig) error { buf := new(bytes.Buffer) g := &goGen{ Generator: &Generator{ Printer: &Printer{Buf: buf, IndentEach: []byte("\t")}, Fset: conf.Fset, AllPkg: conf.AllPkg, Pkg: conf.Pkg, }, } g.Init() if err := g.gen(); err != nil { return err } src := buf.Bytes() srcf, err := format.Source(src) if err != nil { conf.Writer.Write(src) // for debugging return err } _, err = conf.Writer.Write(srcf) return err }