github.com/c-darwin/mobile@v0.0.0-20160313183840-ff625c46f7c9/bind/bind.go (about) 1 // Copyright 2014 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // Package bind implements a code generator for gobind. 6 // 7 // See the documentation on the gobind command for usage details 8 // and the list of currently supported types. 9 // (http://godoc.org/github.com/c-darwin/mobile/cmd/gobind) 10 package bind // import "github.com/c-darwin/mobile/bind" 11 12 // TODO(crawshaw): slice support 13 // TODO(crawshaw): channel support 14 15 import ( 16 "bytes" 17 "go/format" 18 "go/token" 19 "go/types" 20 "io" 21 ) 22 23 // GenJava generates a Java API from a Go package. 24 func GenJava(w io.Writer, fset *token.FileSet, pkg *types.Package) error { 25 buf := new(bytes.Buffer) 26 g := &javaGen{ 27 printer: &printer{buf: buf, indentEach: []byte(" ")}, 28 fset: fset, 29 pkg: pkg, 30 } 31 if err := g.gen(); err != nil { 32 return err 33 } 34 _, err := io.Copy(w, buf) 35 return err 36 } 37 38 // GenGo generates a Go stub to support foreign language APIs. 39 func GenGo(w io.Writer, fset *token.FileSet, pkg *types.Package) error { 40 buf := new(bytes.Buffer) 41 g := &goGen{ 42 printer: &printer{buf: buf, indentEach: []byte("\t")}, 43 fset: fset, 44 pkg: pkg, 45 } 46 if err := g.gen(); err != nil { 47 return err 48 } 49 src := buf.Bytes() 50 srcf, err := format.Source(src) 51 if err != nil { 52 w.Write(src) // for debugging 53 return err 54 } 55 _, err = w.Write(srcf) 56 return err 57 } 58 59 // GenObjc generates the Objective-C API from a Go package. 60 func GenObjc(w io.Writer, fset *token.FileSet, pkg *types.Package, isHeader bool) error { 61 buf := new(bytes.Buffer) 62 g := &objcGen{ 63 printer: &printer{buf: buf, indentEach: []byte("\t")}, 64 fset: fset, 65 pkg: pkg, 66 } 67 var err error 68 if isHeader { 69 err = g.genH() 70 } else { 71 err = g.genM() 72 } 73 if err != nil { 74 return err 75 } 76 _, err = io.Copy(w, buf) 77 return err 78 }