~juju-qa/ubuntu/xenial/juju/xenial-2.0-beta3

« back to all changes in this revision

Viewing changes to src/github.com/juju/httprequest/cmd/httprequest-generate-client/main.go

  • Committer: Martin Packman
  • Date: 2016-03-30 19:31:08 UTC
  • mfrom: (1.1.41)
  • Revision ID: martin.packman@canonical.com-20160330193108-h9iz3ak334uk0z5r
Merge new upstream source 2.0~beta3

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
// - deal with literal interface and struct types.
24
24
// - copy doc comments from server methods.
25
25
 
26
 
var currentDir string
27
 
 
28
26
func main() {
29
27
        flag.Usage = func() {
30
28
                fmt.Fprintf(os.Stderr, "usage: httprequest-generate server-package server-type client-type\n")
44
42
}
45
43
 
46
44
type templateArg struct {
47
 
        CommandLine string
48
45
        PkgName     string
49
46
        Imports     []string
50
47
        Methods     []method
52
49
}
53
50
 
54
51
var code = template.Must(template.New("").Parse(`
55
 
// The code in this file was automatically generated by running
56
 
//      httprequest-generate-client {{.CommandLine}}
 
52
// The code in this file was automatically generated by running httprequest-generate-client.
57
53
// DO NOT EDIT
58
54
 
59
55
package {{.PkgName}}
83
79
{{end}}
84
80
`))
85
81
 
86
 
func generate(serverPkg, serverType, clientType string) error {
87
 
        cwd, err := os.Getwd()
 
82
func generate(serverPkgPath, serverType, clientType string) error {
 
83
        currentDir, err := os.Getwd()
88
84
        if err != nil {
89
85
                return err
90
86
        }
91
 
        currentDir = cwd
92
 
 
93
 
        methods, imports, err := serverMethods(serverPkg, serverType)
94
 
        if err != nil {
95
 
                return errgo.Mask(err)
96
 
        }
97
87
        localPkg, err := build.Import(".", currentDir, 0)
98
88
        if err != nil {
99
89
                return errgo.Notef(err, "cannot open package in current directory")
100
90
        }
 
91
        serverPkg, err := build.Import(serverPkgPath, currentDir, 0)
 
92
        if err != nil {
 
93
                return errgo.Notef(err, "cannot open %q", serverPkgPath)
 
94
        }
 
95
 
 
96
        methods, imports, err := serverMethods(serverPkg.ImportPath, serverType, localPkg.ImportPath)
 
97
        if err != nil {
 
98
                return errgo.Mask(err)
 
99
        }
101
100
        arg := templateArg{
102
 
                CommandLine: strings.Join(flag.Args(), " "),
103
101
                Imports:     imports,
104
102
                Methods:     methods,
105
103
                PkgName:     localPkg.Name,
134
132
        RespType  string
135
133
}
136
134
 
137
 
func serverMethods(serverPkg, serverType string) ([]method, []string, error) {
 
135
func serverMethods(serverPkg, serverType, localPkg string) ([]method, []string, error) {
138
136
        cfg := loader.Config{
139
137
                TypeCheckFuncBodies: func(string) bool {
140
138
                        return false
166
164
 
167
165
        imports := map[string]string{
168
166
                "github.com/juju/httprequest": "httprequest",
 
167
                localPkg:                      "",
169
168
        }
170
169
        var methods []method
171
170
        mset := types.NewMethodSet(ptrObjType)
191
190
                        RespType:  typeStr(rtype, imports),
192
191
                })
193
192
        }
 
193
        delete(imports, localPkg)
194
194
        var allImports []string
195
195
        for path := range imports {
196
196
                allImports = append(allImports, path)
248
248
                return ""
249
249
        }
250
250
        qualify := func(pkg *types.Package) string {
251
 
                if name := imports[pkg.Path()]; name != "" {
 
251
                if name, ok := imports[pkg.Path()]; ok {
252
252
                        return name
253
253
                }
254
254
                name := pkg.Name()