...
1
16
17 package openapi
18
19 import (
20 "sync"
21
22 openapi_v2 "github.com/google/gnostic-models/openapiv2"
23 "k8s.io/client-go/discovery"
24 )
25
26
27 type CachedOpenAPIGetter struct {
28 openAPIClient discovery.OpenAPISchemaInterface
29
30
31 sync.Once
32 openAPISchema *openapi_v2.Document
33 err error
34 }
35
36 var _ discovery.OpenAPISchemaInterface = &CachedOpenAPIGetter{}
37
38
39
40 func NewOpenAPIGetter(openAPIClient discovery.OpenAPISchemaInterface) *CachedOpenAPIGetter {
41 return &CachedOpenAPIGetter{
42 openAPIClient: openAPIClient,
43 }
44 }
45
46
47 func (g *CachedOpenAPIGetter) OpenAPISchema() (*openapi_v2.Document, error) {
48 g.Do(func() {
49 g.openAPISchema, g.err = g.openAPIClient.OpenAPISchema()
50 })
51
52
53 return g.openAPISchema, g.err
54 }
55
56 type CachedOpenAPIParser struct {
57 openAPIClient discovery.OpenAPISchemaInterface
58
59
60 sync.Once
61 openAPIResources Resources
62 err error
63 }
64
65 func NewOpenAPIParser(openAPIClient discovery.OpenAPISchemaInterface) *CachedOpenAPIParser {
66 return &CachedOpenAPIParser{
67 openAPIClient: openAPIClient,
68 }
69 }
70
71 func (p *CachedOpenAPIParser) Parse() (Resources, error) {
72 p.Do(func() {
73 oapi, err := p.openAPIClient.OpenAPISchema()
74 if err != nil {
75 p.err = err
76 return
77 }
78 p.openAPIResources, p.err = NewOpenAPIData(oapi)
79 })
80
81 return p.openAPIResources, p.err
82 }
83
View as plain text