forked from goadesign/goa
/
extensions.go
46 lines (42 loc) · 1.07 KB
/
extensions.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package openapi
import (
"encoding/json"
"strings"
"goa.design/goa/expr"
)
// ExtensionsFromExpr generates swagger extensions from the given meta
// expression.
func ExtensionsFromExpr(mdata expr.MetaExpr) map[string]interface{} {
return extensionsFromExprWithPrefix(mdata, "swagger:extension:")
}
// extensionsFromExprWithPrefix generates swagger extensions from
// the given meta expression with keys starting the given prefix.
func extensionsFromExprWithPrefix(mdata expr.MetaExpr, prefix string) map[string]interface{} {
if !strings.HasSuffix(prefix, ":") {
prefix += ":"
}
extensions := make(map[string]interface{})
for key, value := range mdata {
if !strings.HasPrefix(key, prefix) {
continue
}
name := key[len(prefix):]
if strings.Contains(name, ":") {
continue
}
if !strings.HasPrefix(name, "x-") {
continue
}
val := value[0]
ival := interface{}(val)
if err := json.Unmarshal([]byte(val), &ival); err != nil {
extensions[name] = val
continue
}
extensions[name] = ival
}
if len(extensions) == 0 {
return nil
}
return extensions
}