@@ -145,19 +145,27 @@ type Spec struct {
145145 enums enumAnalysis
146146 allSchemas map [string ]SchemaRef
147147 allOfs map [string ]SchemaRef
148+ mangler mangling.NameMangler
148149}
149150
150151// New takes a swagger spec object and returns an analyzed spec document.
151152// The analyzed document contains a number of indices that make it easier to
152153// reason about semantics of a swagger specification for use in code generation
153154// or validation etc.
154- func New (doc * spec.Swagger ) * Spec {
155+ func New (doc * spec.Swagger , opts ... Option ) * Spec {
156+ o := & analyzerOptions {}
157+ for _ , opt := range opts {
158+ opt (o )
159+ }
160+
155161 a := & Spec {
156162 spec : doc ,
157163 references : referenceAnalysis {},
158164 patterns : patternAnalysis {},
159165 enums : enumAnalysis {},
166+ mangler : mangling .NewNameMangler (o .manglerOpts ... ),
160167 }
168+
161169 a .reset ()
162170 a .initialize ()
163171
@@ -288,20 +296,6 @@ func (s *Spec) ProducesFor(operation *spec.Operation) []string {
288296 return s .structMapKeys (prod )
289297}
290298
291- func mapKeyFromParam (param * spec.Parameter ) string {
292- return fmt .Sprintf ("%s#%s" , param .In , fieldNameFromParam (param ))
293- }
294-
295- func fieldNameFromParam (param * spec.Parameter ) string {
296- // TODO: this should be x-go-name
297- if nm , ok := param .Extensions .GetString ("go-name" ); ok {
298- return nm
299- }
300- mangler := mangling .NewNameMangler ()
301-
302- return mangler .ToGoName (param .Name )
303- }
304-
305299// ErrorOnParamFunc is a callback function to be invoked
306300// whenever an error is encountered while resolving references
307301// on parameters.
@@ -651,6 +645,19 @@ func (s *Spec) AllEnums() map[string][]any {
651645 return cloneEnumMap (s .enums .allEnums )
652646}
653647
648+ func (s * Spec ) mapKeyFromParam (param * spec.Parameter ) string {
649+ return fmt .Sprintf ("%s#%s" , param .In , s .fieldNameFromParam (param ))
650+ }
651+
652+ func (s * Spec ) fieldNameFromParam (param * spec.Parameter ) string {
653+ // TODO: this should be x-go-name
654+ if nm , ok := param .Extensions .GetString ("go-name" ); ok {
655+ return nm
656+ }
657+
658+ return s .mangler .ToGoName (param .Name )
659+ }
660+
654661func (s * Spec ) structMapKeys (mp map [string ]struct {}) []string {
655662 if len (mp ) == 0 {
656663 return nil
@@ -668,7 +675,7 @@ func (s *Spec) paramsAsMap(parameters []spec.Parameter, res map[string]spec.Para
668675 for _ , param := range parameters {
669676 pr := param
670677 if pr .Ref .String () == "" {
671- res [mapKeyFromParam (& pr )] = pr
678+ res [s . mapKeyFromParam (& pr )] = pr
672679
673680 continue
674681 }
@@ -699,7 +706,7 @@ func (s *Spec) paramsAsMap(parameters []spec.Parameter, res map[string]spec.Para
699706 }
700707
701708 pr = objAsParam
702- res [mapKeyFromParam (& pr )] = pr
709+ res [s . mapKeyFromParam (& pr )] = pr
703710 }
704711}
705712
0 commit comments