@@ -20,97 +20,36 @@ func (c *RegistrarClient) CreateFarm(farmName, stellarAddr string, dedicated boo
20
20
return c .createFarm (farmName , stellarAddr , dedicated )
21
21
}
22
22
23
- // UpdateFarm update farm configuration (farmName, stellarAddress, dedicated).
24
- func (c * RegistrarClient ) UpdateFarm (farmID uint64 , opts ... UpdateFarmOpts ) (err error ) {
25
- return c .updateFarm (farmID , opts )
23
+ // UpdateFarm updates an existing farm's configuration
24
+ func (c * RegistrarClient ) UpdateFarm (farmID uint64 , update FarmUpdate ) (err error ) {
25
+ return c .updateFarm (farmID , update )
26
26
}
27
27
28
28
// GetFarm get a farm using its farmID
29
29
func (c * RegistrarClient ) GetFarm (farmID uint64 ) (farm Farm , err error ) {
30
30
return c .getFarm (farmID )
31
31
}
32
32
33
- // ListFarms get a list of farm using ListFarmOpts
34
- func (c * RegistrarClient ) ListFarms (opts ... ListFarmOpts ) (farms []Farm , err error ) {
35
- return c .listFarms (opts ... )
33
+ // ListFarms gets a list of farms using filter options
34
+ func (c * RegistrarClient ) ListFarms (filter FarmFilter ) (farms []Farm , err error ) {
35
+ return c .listFarms (filter )
36
36
}
37
37
38
- type farmCfg struct {
39
- farmName string
40
- farmID uint64
41
- twinID uint64
42
- dedicated bool
43
- stellarAddress string
44
- page uint32
45
- size uint32
38
+ // FarmUpdate represents the data needed to update an existing farm
39
+ type FarmUpdate struct {
40
+ FarmName * string
41
+ StellarAddress * string
42
+ Dedicated * bool
46
43
}
47
44
48
- type (
49
- ListFarmOpts func (* farmCfg )
50
- UpdateFarmOpts func (* farmCfg )
51
- )
52
-
53
- // ListFarmWithName lists farms with farm name
54
- func ListFarmWithName (name string ) ListFarmOpts {
55
- return func (n * farmCfg ) {
56
- n .farmName = name
57
- }
58
- }
59
-
60
- // ListFarmWithFarmID lists farms with farmID
61
- func ListFarmWithFarmID (id uint64 ) ListFarmOpts {
62
- return func (n * farmCfg ) {
63
- n .farmID = id
64
- }
65
- }
66
-
67
- // ListFarmWithTwinID lists farms with twinID
68
- func ListFarmWithTwinID (id uint64 ) ListFarmOpts {
69
- return func (n * farmCfg ) {
70
- n .twinID = id
71
- }
72
- }
73
-
74
- // ListFarmWithDedicated lists dedicated farms
75
- func ListFarmWithDedicated () ListFarmOpts {
76
- return func (n * farmCfg ) {
77
- n .dedicated = true
78
- }
79
- }
80
-
81
- // ListFarmWithPage lists farms in a certain page
82
- func ListFarmWithPage (page uint32 ) ListFarmOpts {
83
- return func (n * farmCfg ) {
84
- n .page = page
85
- }
86
- }
87
-
88
- // ListFarmWithPage lists size number of farms
89
- func ListFarmWithSize (size uint32 ) ListFarmOpts {
90
- return func (n * farmCfg ) {
91
- n .size = size
92
- }
93
- }
94
-
95
- // UpdateFarmWithName update farm name
96
- func UpdateFarmWithName (name string ) UpdateFarmOpts {
97
- return func (n * farmCfg ) {
98
- n .farmName = name
99
- }
100
- }
101
-
102
- // UpdateFarmWithName set farm status to dedicated
103
- func UpdateFarmWithDedicated () UpdateFarmOpts {
104
- return func (n * farmCfg ) {
105
- n .dedicated = true
106
- }
107
- }
108
-
109
- // UpdateFarmWithName set farm status to dedicated
110
- func UpdateFarmWithStellarAddress (address string ) UpdateFarmOpts {
111
- return func (n * farmCfg ) {
112
- n .stellarAddress = address
113
- }
45
+ // FarmFilter represents filtering options for listing farms
46
+ type FarmFilter struct {
47
+ FarmID * uint64
48
+ FarmName * string
49
+ TwinID * uint64
50
+ Dedicated * bool
51
+ Page * uint32
52
+ Size * uint32
114
53
}
115
54
116
55
func (c * RegistrarClient ) createFarm (farmName , stellarAddr string , dedicated bool ) (farmID uint64 , err error ) {
@@ -177,7 +116,7 @@ func (c *RegistrarClient) createFarm(farmName, stellarAddr string, dedicated boo
177
116
return result .FarmID , nil
178
117
}
179
118
180
- func (c * RegistrarClient ) updateFarm (farmID uint64 , opts [] UpdateFarmOpts ) (err error ) {
119
+ func (c * RegistrarClient ) updateFarm (farmID uint64 , update FarmUpdate ) (err error ) {
181
120
if err = c .ensureTwinID (); err != nil {
182
121
return errors .Wrap (err , "failed to ensure twin id" )
183
122
}
@@ -188,7 +127,7 @@ func (c *RegistrarClient) updateFarm(farmID uint64, opts []UpdateFarmOpts) (err
188
127
}
189
128
190
129
var body bytes.Buffer
191
- data := parseUpdateFarmOpts (opts )
130
+ data := parseUpdateFarmOpts (update )
192
131
193
132
if stellarAddr , ok := data ["stellar_address" ]; ok {
194
133
if err = validateStellarAddress (stellarAddr .(string )); err != nil {
@@ -224,7 +163,7 @@ func (c *RegistrarClient) updateFarm(farmID uint64, opts []UpdateFarmOpts) (err
224
163
225
164
if resp .StatusCode != http .StatusOK {
226
165
err = parseResponseError (resp .Body )
227
- return errors .Wrapf (err , "failed to create farm with status code %s" , resp .Status )
166
+ return errors .Wrapf (err , "failed to update farm with status code %s" , resp .Status )
228
167
}
229
168
230
169
return
@@ -261,13 +200,13 @@ func (c *RegistrarClient) getFarm(id uint64) (farm Farm, err error) {
261
200
return
262
201
}
263
202
264
- func (c * RegistrarClient ) listFarms (opts ... ListFarmOpts ) (farms []Farm , err error ) {
203
+ func (c * RegistrarClient ) listFarms (filter FarmFilter ) (farms []Farm , err error ) {
265
204
url , err := url .JoinPath (c .baseURL , "farms" )
266
205
if err != nil {
267
206
return farms , errors .Wrap (err , "failed to construct registrar url" )
268
207
}
269
208
270
- data := parseListFarmOpts (opts )
209
+ data := parseListFarmOpts (filter )
271
210
272
211
req , err := http .NewRequest ("GET" , url , nil )
273
212
if err != nil {
@@ -303,63 +242,53 @@ func (c *RegistrarClient) listFarms(opts ...ListFarmOpts) (farms []Farm, err err
303
242
return
304
243
}
305
244
306
- func parseListFarmOpts (opts []ListFarmOpts ) map [string ]any {
307
- cfg := farmCfg {
308
- farmName : "" ,
309
- farmID : 0 ,
310
- twinID : 0 ,
311
- dedicated : false ,
312
- page : 1 ,
313
- size : 50 ,
314
- }
245
+ func parseListFarmOpts (filter FarmFilter ) map [string ]any {
246
+ data := map [string ]any {}
315
247
316
- for _ , opt := range opts {
317
- opt ( & cfg )
248
+ if filter . FarmName != nil && * filter . FarmName != "" {
249
+ data [ "farm_name" ] = * filter . FarmName
318
250
}
319
251
320
- data := map [string ]any {}
321
-
322
- if len (cfg .farmName ) != 0 {
323
- data ["farm_name" ] = cfg .farmName
252
+ if filter .FarmID != nil {
253
+ data ["farm_id" ] = * filter .FarmID
324
254
}
325
255
326
- if cfg . farmID != 0 {
327
- data ["farm_id " ] = cfg . farmID
256
+ if filter . TwinID != nil {
257
+ data ["twin_id " ] = * filter . TwinID
328
258
}
329
259
330
- if cfg . twinID != 0 {
331
- data ["twin_id " ] = cfg . twinID
260
+ if filter . Dedicated != nil {
261
+ data ["dedicated " ] = * filter . Dedicated
332
262
}
333
263
334
- if cfg .dedicated {
335
- data ["dedicated" ] = true
264
+ page := uint32 (1 )
265
+ if filter .Page != nil {
266
+ page = * filter .Page
336
267
}
268
+ data ["page" ] = page
337
269
338
- data ["page" ] = cfg .page
339
- data ["size" ] = cfg .size
270
+ size := uint32 (50 )
271
+ if filter .Size != nil {
272
+ size = * filter .Size
273
+ }
274
+ data ["size" ] = size
340
275
341
276
return data
342
277
}
343
278
344
- func parseUpdateFarmOpts (opts []UpdateFarmOpts ) map [string ]any {
345
- cfg := farmCfg {}
346
-
347
- for _ , opt := range opts {
348
- opt (& cfg )
349
- }
350
-
279
+ func parseUpdateFarmOpts (update FarmUpdate ) map [string ]any {
351
280
data := map [string ]any {}
352
281
353
- if len ( cfg . farmName ) != 0 {
354
- data ["farm_name" ] = cfg . farmName
282
+ if update . FarmName != nil {
283
+ data ["farm_name" ] = * update . FarmName
355
284
}
356
285
357
- if cfg . dedicated {
358
- data ["dedicated " ] = true
286
+ if update . StellarAddress != nil {
287
+ data ["stellar_address " ] = * update . StellarAddress
359
288
}
360
289
361
- if len ( cfg . stellarAddress ) != 0 {
362
- data ["stellar_address " ] = cfg . stellarAddress
290
+ if update . Dedicated != nil {
291
+ data ["dedicated " ] = * update . Dedicated
363
292
}
364
293
365
294
return data
0 commit comments