1// Copyright 2015 go-swagger maintainers
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//    http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package generate
16
17import (
18	"log"
19
20	"github.com/go-swagger/go-swagger/generator"
21)
22
23type clientOptions struct {
24	ClientPackage string `long:"client-package" short:"c" description:"the package to save the client specific code" default:"client"`
25}
26
27func (co clientOptions) apply(opts *generator.GenOpts) {
28	opts.ClientPackage = co.ClientPackage
29}
30
31// Client the command to generate a swagger client
32type Client struct {
33	WithShared
34	WithModels
35	WithOperations
36
37	clientOptions
38	schemeOptions
39	mediaOptions
40
41	SkipModels     bool `long:"skip-models" description:"no models will be generated when this flag is specified"`
42	SkipOperations bool `long:"skip-operations" description:"no operations will be generated when this flag is specified"`
43
44	Name string `long:"name" short:"A" description:"the name of the application, defaults to a mangled value of info.title"`
45}
46
47func (c Client) apply(opts *generator.GenOpts) {
48	c.Shared.apply(opts)
49	c.Models.apply(opts)
50	c.Operations.apply(opts)
51	c.clientOptions.apply(opts)
52	c.schemeOptions.apply(opts)
53	c.mediaOptions.apply(opts)
54
55	opts.IncludeModel = !c.SkipModels
56	opts.IncludeValidator = !c.SkipModels
57	opts.IncludeHandler = !c.SkipOperations
58	opts.IncludeParameters = !c.SkipOperations
59	opts.IncludeResponses = !c.SkipOperations
60	opts.Name = c.Name
61
62	opts.IsClient = true
63	opts.IncludeSupport = true
64}
65
66func (c *Client) generate(opts *generator.GenOpts) error {
67	return generator.GenerateClient(c.Name, c.Models.Models, c.Operations.Operations, opts)
68}
69
70func (c *Client) log(rp string) {
71	log.Printf(`Generation completed!
72
73For this generation to compile you need to have some packages in your GOPATH:
74
75	* github.com/go-openapi/errors
76	* github.com/go-openapi/runtime
77	* github.com/go-openapi/runtime/client
78	* github.com/go-openapi/strfmt
79
80You can get these now with: go get -u -f %s/...
81`, rp)
82}
83
84// Execute runs this command
85func (c *Client) Execute(args []string) error {
86	return createSwagger(c)
87}
88