@@ -10,6 +10,15 @@ import (
10
10
"github.com/overmindtech/cli/sources/shared"
11
11
)
12
12
13
+ type typeOfAdapter string
14
+
15
+ const (
16
+ Standard typeOfAdapter = "standard"
17
+ Listable typeOfAdapter = "listable"
18
+ Searchable typeOfAdapter = "searchable"
19
+ SearchableListable typeOfAdapter = "searchableListable"
20
+ )
21
+
13
22
var adaptersByScope = map [gcpshared.Scope ]map [shared.ItemType ]gcpshared.AdapterMeta {}
14
23
15
24
func init () {
@@ -52,29 +61,12 @@ func Adapters(projectID string, token string, regions []string, zones []string,
52
61
UniqueAttributeKeys : meta .UniqueAttributeKeys ,
53
62
}
54
63
55
- if meta .ListEndpointFunc != nil {
56
- listEndpoint , err := meta .ListEndpointFunc (projectID )
57
- if err != nil {
58
- return nil , err
59
- }
60
-
61
- adapters = append (adapters , NewListableAdapter (listEndpoint , cfg ))
62
-
63
- continue
64
- }
65
-
66
- if meta .SearchEndpointFunc != nil {
67
- searchEndpointFunc , err := meta .SearchEndpointFunc (projectID )
68
- if err != nil {
69
- return nil , err
70
- }
71
-
72
- adapters = append (adapters , NewSearchableAdapter (searchEndpointFunc , cfg ))
73
-
74
- continue
64
+ adapter , err := makeAdapter (meta , cfg , projectID )
65
+ if err != nil {
66
+ return nil , fmt .Errorf ("failed to add adapter for %s: %w" , sdpItemType , err )
75
67
}
76
68
77
- adapters = append (adapters , NewAdapter ( cfg ) )
69
+ adapters = append (adapters , adapter )
78
70
}
79
71
80
72
// Regional adapters
@@ -105,28 +97,12 @@ func Adapters(projectID string, token string, regions []string, zones []string,
105
97
UniqueAttributeKeys : meta .UniqueAttributeKeys ,
106
98
}
107
99
108
- if meta .ListEndpointFunc != nil {
109
- listEndpoint , err := meta .ListEndpointFunc (projectID , region )
110
- if err != nil {
111
- return nil , err
112
- }
113
- adapters = append (adapters , NewListableAdapter (listEndpoint , cfg ))
114
-
115
- continue
116
- }
117
-
118
- if meta .SearchEndpointFunc != nil {
119
- searchEndpointFunc , err := meta .SearchEndpointFunc (projectID , region )
120
- if err != nil {
121
- return nil , err
122
- }
123
-
124
- adapters = append (adapters , NewSearchableAdapter (searchEndpointFunc , cfg ))
125
-
126
- continue
100
+ adapter , err := makeAdapter (meta , cfg , projectID , region )
101
+ if err != nil {
102
+ return nil , fmt .Errorf ("failed to add adapter for %s in region %s: %w" , sdpItemType , region , err )
127
103
}
128
104
129
- adapters = append (adapters , NewAdapter ( cfg ) )
105
+ adapters = append (adapters , adapter )
130
106
}
131
107
}
132
108
@@ -158,30 +134,65 @@ func Adapters(projectID string, token string, regions []string, zones []string,
158
134
UniqueAttributeKeys : meta .UniqueAttributeKeys ,
159
135
}
160
136
161
- if meta .ListEndpointFunc != nil {
162
- listEndpoint , err := meta .ListEndpointFunc (projectID , zone )
163
- if err != nil {
164
- return nil , err
165
- }
166
- adapters = append (adapters , NewListableAdapter (listEndpoint , cfg ))
167
-
168
- continue
137
+ adapter , err := makeAdapter (meta , cfg , projectID , zone )
138
+ if err != nil {
139
+ return nil , fmt .Errorf ("failed to add adapter for %s in zone %s: %w" , sdpItemType , zone , err )
169
140
}
170
141
171
- if meta .SearchEndpointFunc != nil {
172
- searchEndpointFunc , err := meta .SearchEndpointFunc (projectID , zone )
173
- if err != nil {
174
- return nil , err
175
- }
142
+ adapters = append (adapters , adapter )
143
+ }
144
+ }
176
145
177
- adapters = append (adapters , NewSearchableAdapter (searchEndpointFunc , cfg ))
146
+ return adapters , nil
147
+ }
178
148
179
- continue
180
- }
149
+ func adapterType (meta gcpshared.AdapterMeta ) typeOfAdapter {
150
+ if meta .ListEndpointFunc != nil && meta .SearchEndpointFunc == nil {
151
+ return Listable
152
+ }
181
153
182
- adapters = append ( adapters , NewAdapter ( cfg ))
183
- }
154
+ if meta . SearchEndpointFunc != nil && meta . ListEndpointFunc == nil {
155
+ return Searchable
184
156
}
185
157
186
- return adapters , nil
158
+ if meta .ListEndpointFunc != nil && meta .SearchEndpointFunc != nil {
159
+ return SearchableListable
160
+ }
161
+
162
+ return Standard
163
+ }
164
+
165
+ func makeAdapter (meta gcpshared.AdapterMeta , cfg * AdapterConfig , opts ... string ) (discovery.Adapter , error ) {
166
+ switch adapterType (meta ) {
167
+ case SearchableListable :
168
+ searchEndpointFunc , err := meta .SearchEndpointFunc (opts ... )
169
+ if err != nil {
170
+ return nil , err
171
+ }
172
+
173
+ listEndpoint , err := meta .ListEndpointFunc (opts ... )
174
+ if err != nil {
175
+ return nil , err
176
+ }
177
+
178
+ return NewSearchableListableAdapter (searchEndpointFunc , listEndpoint , cfg ), nil
179
+ case Searchable :
180
+ searchEndpointFunc , err := meta .SearchEndpointFunc (opts ... )
181
+ if err != nil {
182
+ return nil , err
183
+ }
184
+
185
+ return NewSearchableAdapter (searchEndpointFunc , cfg ), nil
186
+ case Listable :
187
+ listEndpoint , err := meta .ListEndpointFunc (opts ... )
188
+ if err != nil {
189
+ return nil , err
190
+ }
191
+
192
+ return NewListableAdapter (listEndpoint , cfg ), nil
193
+ case Standard :
194
+ return NewAdapter (cfg ), nil
195
+ default :
196
+ return nil , fmt .Errorf ("unknown adapter type %s" , adapterType (meta ))
197
+ }
187
198
}
0 commit comments