MCPcopy Index your code
hub / github.com/oapi-codegen/oapi-codegen / serverObjectDefinitions

Function serverObjectDefinitions

pkg/codegen/server_urls.go:104–161  ·  view source on GitHub ↗

serverObjectDefinitions deconflicts server names and returns the stable, deterministically-named ServerObjectDefinitions for `spec`. Used by both BuildServerURLTypeDefinitions and GenerateServerURLs so they generate identifiers that match.

(spec *openapi3.T)

Source from the content-addressed store, hash-verified

102// Used by both BuildServerURLTypeDefinitions and GenerateServerURLs so
103// they generate identifiers that match.
104func serverObjectDefinitions(spec *openapi3.T) ([]ServerObjectDefinition, error) {
105 names := make(map[string]*openapi3.Server)
106
107 for _, server := range spec.Servers {
108 var name string
109 if goNameExt, ok := server.Extensions[extGoName]; ok {
110 customName, err := extParseGoFieldName(goNameExt)
111 if err != nil {
112 return nil, fmt.Errorf("invalid value for %q: %w", extGoName, err)
113 }
114 if customName != "" {
115 name = customName
116 }
117 }
118 if name == "" {
119 suffix := server.Description
120 if suffix == "" {
121 suffix = nameNormalizer(server.URL)
122 }
123 name = serverURLPrefix + UppercaseFirstCharacter(suffix)
124 name = nameNormalizer(name)
125 }
126
127 // if this is the only type with this name, store it
128 if _, conflict := names[name]; !conflict {
129 names[name] = server
130 continue
131 }
132
133 // otherwise, try appending a number to the name. Start at 1 so
134 // `Foo` / `Foo1` reads better than `Foo` / `Foo0`.
135 saved := false
136 for i := 1; i < 1+serverURLSuffixIterations; i++ {
137 suffixed := name + strconv.Itoa(i)
138 if _, suffixConflict := names[suffixed]; !suffixConflict {
139 names[suffixed] = server
140 saved = true
141 break
142 }
143 }
144
145 if saved {
146 continue
147 }
148
149 return nil, fmt.Errorf("failed to create a unique name for the Server URL (%#v) with description (%#v) after %d iterations", server.URL, server.Description, serverURLSuffixIterations)
150 }
151
152 keys := SortedMapKeys(names)
153 servers := make([]ServerObjectDefinition, len(keys))
154 for i, k := range keys {
155 servers[i] = ServerObjectDefinition{
156 GoName: k,
157 OAPISchema: names[k],
158 }
159 }
160 return servers, nil
161}

Callers 2

GenerateServerURLsFunction · 0.85

Calls 3

extParseGoFieldNameFunction · 0.85
UppercaseFirstCharacterFunction · 0.85
SortedMapKeysFunction · 0.85

Tested by

no test coverage detected