github.com/josephspurrier/go-swagger@v0.2.1-0.20221129144919-1f672a142a00/generator/client.go (about)

     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  
    15  package generator
    16  
    17  import (
    18  	"errors"
    19  
    20  	"github.com/go-openapi/swag"
    21  )
    22  
    23  // GenerateClient generates a client library for a swagger spec document.
    24  func GenerateClient(name string, modelNames, operationIDs []string, opts *GenOpts) error {
    25  	if err := opts.CheckOpts(); err != nil {
    26  		return err
    27  	}
    28  
    29  	if err := opts.setTemplates(); err != nil {
    30  		return err
    31  	}
    32  
    33  	specDoc, analyzed, err := opts.analyzeSpec()
    34  	if err != nil {
    35  		return err
    36  	}
    37  
    38  	models, err := gatherModels(specDoc, modelNames)
    39  	if err != nil {
    40  		return err
    41  	}
    42  
    43  	operations := gatherOperations(analyzed, operationIDs)
    44  	if len(operations) == 0 {
    45  		return errors.New("no operations were selected")
    46  	}
    47  
    48  	generator := appGenerator{
    49  		Name:              appNameOrDefault(specDoc, name, defaultClientName),
    50  		SpecDoc:           specDoc,
    51  		Analyzed:          analyzed,
    52  		Models:            models,
    53  		Operations:        operations,
    54  		Target:            opts.Target,
    55  		DumpData:          opts.DumpData,
    56  		Package:           opts.LanguageOpts.ManglePackageName(opts.ClientPackage, defaultClientTarget),
    57  		APIPackage:        opts.LanguageOpts.ManglePackagePath(opts.APIPackage, defaultOperationsTarget),
    58  		ModelsPackage:     opts.LanguageOpts.ManglePackagePath(opts.ModelPackage, defaultModelsTarget),
    59  		ServerPackage:     opts.LanguageOpts.ManglePackagePath(opts.ServerPackage, defaultServerTarget),
    60  		ClientPackage:     opts.LanguageOpts.ManglePackagePath(opts.ClientPackage, defaultClientTarget),
    61  		OperationsPackage: opts.LanguageOpts.ManglePackagePath(opts.ClientPackage, defaultClientTarget),
    62  		Principal:         opts.PrincipalAlias(),
    63  		DefaultScheme:     opts.DefaultScheme,
    64  		DefaultProduces:   opts.DefaultProduces,
    65  		DefaultConsumes:   opts.DefaultConsumes,
    66  		GenOpts:           opts,
    67  	}
    68  	generator.Receiver = "o"
    69  	return (&clientGenerator{generator}).Generate()
    70  }
    71  
    72  type clientGenerator struct {
    73  	appGenerator
    74  }
    75  
    76  func (c *clientGenerator) Generate() error {
    77  	app, err := c.makeCodegenApp()
    78  	if err != nil {
    79  		return err
    80  	}
    81  
    82  	if c.DumpData {
    83  		return dumpData(swag.ToDynamicJSON(app))
    84  	}
    85  
    86  	if c.GenOpts.IncludeModel {
    87  		for _, m := range app.Models {
    88  			if m.IsStream {
    89  				continue
    90  			}
    91  			mod := m
    92  			if err := c.GenOpts.renderDefinition(&mod); err != nil {
    93  				return err
    94  			}
    95  		}
    96  	}
    97  
    98  	if c.GenOpts.IncludeHandler {
    99  		for _, g := range app.OperationGroups {
   100  			opg := g
   101  			for _, o := range opg.Operations {
   102  				op := o
   103  				if err := c.GenOpts.renderOperation(&op); err != nil {
   104  					return err
   105  				}
   106  			}
   107  			if err := c.GenOpts.renderOperationGroup(&opg); err != nil {
   108  				return err
   109  			}
   110  		}
   111  	}
   112  
   113  	if c.GenOpts.IncludeSupport {
   114  		if err := c.GenOpts.renderApplication(&app); err != nil {
   115  			return err
   116  		}
   117  	}
   118  
   119  	return nil
   120  }