func newMetaParser(swspec *spec.Swagger) *sectionedParser { sp := new(sectionedParser) if swspec.Info == nil { swspec.Info = new(spec.Info) } info := swspec.Info sp.setTitle = func(lines []string) { tosave := joinDropLast(lines) if len(tosave) > 0 { tosave = rxStripTitleComments.ReplaceAllString(tosave, "") } info.Title = tosave } sp.setDescription = func(lines []string) { info.Description = joinDropLast(lines) } sp.taggers = []tagParser{ newMultiLineTagParser("TOS", newMultilineDropEmptyParser(rxTOS, metaTOSSetter(info))), newMultiLineTagParser("Consumes", newMultilineDropEmptyParser(rxConsumes, metaConsumesSetter(swspec))), newMultiLineTagParser("Produces", newMultilineDropEmptyParser(rxProduces, metaProducesSetter(swspec))), newSingleLineTagParser("Schemes", newSetSchemes(metaSchemeSetter(swspec))), newSingleLineTagParser("Version", &setMetaSingle{swspec, rxVersion, setInfoVersion}), newSingleLineTagParser("Host", &setMetaSingle{swspec, rxHost, setSwaggerHost}), newSingleLineTagParser("BasePath", &setMetaSingle{swspec, rxBasePath, setSwaggerBasePath}), newSingleLineTagParser("Contact", &setMetaSingle{swspec, rxContact, setInfoContact}), newSingleLineTagParser("License", &setMetaSingle{swspec, rxLicense, setInfoLicense}), } return sp }
func setSwaggerBasePath(swspec *spec.Swagger, lines []string) error { var ln string if len(lines) > 0 { ln = lines[0] } swspec.BasePath = ln return nil }
func setSwaggerHost(swspec *spec.Swagger, lines []string) error { lns := lines if len(lns) == 0 || (len(lines) == 1 && len(lines[0]) == 0) { lns = []string{"localhost"} } swspec.Host = lns[0] return nil }
// newAPIParser creates a new api parser func newAppScanner(bp string, input *spec.Swagger, includes, excludes packageFilters) (*appScanner, error) { var ldr loader.Config ldr.ParserMode = goparser.ParseComments ldr.Import(bp) prog, err := ldr.Load() if err != nil { return nil, err } if input == nil { input = new(spec.Swagger) } if input.Paths == nil { input.Paths = new(spec.Paths) } if input.Definitions == nil { input.Definitions = make(map[string]spec.Schema) } if input.Responses == nil { input.Responses = make(map[string]spec.Response) } return &appScanner{ MainPackage: bp, prog: prog, input: input, loader: &ldr, operations: collectOperationsFromInput(input), definitions: input.Definitions, responses: input.Responses, classifier: &programClassifier{ Includes: includes, Excludes: excludes, }, }, nil }
func metaSchemeSetter(meta *spec.Swagger) func([]string) { return func(schemes []string) { meta.Schemes = schemes } }
func metaProducesSetter(meta *spec.Swagger) func([]string) { return func(produces []string) { meta.Produces = produces } }
func metaConsumesSetter(meta *spec.Swagger) func([]string) { return func(consumes []string) { meta.Consumes = consumes } }
func safeInfo(swspec *spec.Swagger) *spec.Info { if swspec.Info == nil { swspec.Info = new(spec.Info) } return swspec.Info }