@@ -387,7 +387,15 @@ func (s SortableSnapshots) Swap(i, j int) {
387
387
s .snapshots [i ], s .snapshots [j ] = s .snapshots [j ], s .snapshots [i ]
388
388
}
389
389
390
- type OperatorPredicate func (* Operator ) bool
390
+ type OperatorPredicateFunc func (* Operator ) bool
391
+
392
+ func (opf OperatorPredicateFunc ) Test (o * Operator ) bool {
393
+ return opf (o )
394
+ }
395
+
396
+ type OperatorPredicate interface {
397
+ Test (* Operator ) bool
398
+ }
391
399
392
400
func (s * CatalogSnapshot ) Find (p ... OperatorPredicate ) []* Operator {
393
401
s .m .RLock ()
@@ -416,13 +424,13 @@ func (f EmptyOperatorFinder) Find(...OperatorPredicate) []*Operator {
416
424
}
417
425
418
426
func WithCSVName (name string ) OperatorPredicate {
419
- return func (o * Operator ) bool {
427
+ return OperatorPredicateFunc ( func (o * Operator ) bool {
420
428
return o .name == name
421
- }
429
+ })
422
430
}
423
431
424
432
func WithChannel (channel string ) OperatorPredicate {
425
- return func (o * Operator ) bool {
433
+ return OperatorPredicateFunc ( func (o * Operator ) bool {
426
434
// all operators match the empty channel
427
435
if channel == "" {
428
436
return true
@@ -431,11 +439,11 @@ func WithChannel(channel string) OperatorPredicate {
431
439
return false
432
440
}
433
441
return o .bundle .ChannelName == channel
434
- }
442
+ })
435
443
}
436
444
437
445
func WithPackage (pkg string ) OperatorPredicate {
438
- return func (o * Operator ) bool {
446
+ return OperatorPredicateFunc ( func (o * Operator ) bool {
439
447
for _ , p := range o .Properties () {
440
448
if p .Type != opregistry .PackageType {
441
449
continue
@@ -450,22 +458,22 @@ func WithPackage(pkg string) OperatorPredicate {
450
458
}
451
459
}
452
460
return o .Package () == pkg
453
- }
461
+ })
454
462
}
455
463
456
464
func WithoutDeprecatedProperty () OperatorPredicate {
457
- return func (o * Operator ) bool {
465
+ return OperatorPredicateFunc ( func (o * Operator ) bool {
458
466
for _ , p := range o .bundle .GetProperties () {
459
467
if p .GetType () == opregistry .DeprecatedType {
460
468
return false
461
469
}
462
470
}
463
471
return true
464
- }
472
+ })
465
473
}
466
474
467
475
func WithVersionInRange (r semver.Range ) OperatorPredicate {
468
- return func (o * Operator ) bool {
476
+ return OperatorPredicateFunc ( func (o * Operator ) bool {
469
477
for _ , p := range o .Properties () {
470
478
if p .Type != opregistry .PackageType {
471
479
continue
@@ -484,11 +492,11 @@ func WithVersionInRange(r semver.Range) OperatorPredicate {
484
492
}
485
493
}
486
494
return o .version != nil && r (* o .version )
487
- }
495
+ })
488
496
}
489
497
490
498
func WithLabel (label string ) OperatorPredicate {
491
- return func (o * Operator ) bool {
499
+ return OperatorPredicateFunc ( func (o * Operator ) bool {
492
500
for _ , p := range o .Properties () {
493
501
if p .Type != opregistry .LabelType {
494
502
continue
@@ -503,11 +511,11 @@ func WithLabel(label string) OperatorPredicate {
503
511
}
504
512
}
505
513
return false
506
- }
514
+ })
507
515
}
508
516
509
517
func ProvidingAPI (api opregistry.APIKey ) OperatorPredicate {
510
- return func (o * Operator ) bool {
518
+ return OperatorPredicateFunc ( func (o * Operator ) bool {
511
519
for _ , p := range o .Properties () {
512
520
if p .Type != opregistry .GVKType {
513
521
continue
@@ -522,19 +530,19 @@ func ProvidingAPI(api opregistry.APIKey) OperatorPredicate {
522
530
}
523
531
}
524
532
return false
525
- }
533
+ })
526
534
}
527
535
528
536
func SkipRangeIncludes (version semver.Version ) OperatorPredicate {
529
- return func (o * Operator ) bool {
537
+ return OperatorPredicateFunc ( func (o * Operator ) bool {
530
538
// TODO: lift range parsing to OperatorSurface
531
539
semverRange , err := semver .ParseRange (o .bundle .SkipRange )
532
540
return err == nil && semverRange (version )
533
- }
541
+ })
534
542
}
535
543
536
544
func Replaces (name string ) OperatorPredicate {
537
- return func (o * Operator ) bool {
545
+ return OperatorPredicateFunc ( func (o * Operator ) bool {
538
546
if o .Replaces () == name {
539
547
return true
540
548
}
@@ -544,29 +552,29 @@ func Replaces(name string) OperatorPredicate {
544
552
}
545
553
}
546
554
return false
547
- }
555
+ })
548
556
}
549
557
550
558
func And (p ... OperatorPredicate ) OperatorPredicate {
551
- return func (o * Operator ) bool {
559
+ return OperatorPredicateFunc ( func (o * Operator ) bool {
552
560
for _ , l := range p {
553
- if l (o ) == false {
561
+ if l . Test (o ) == false {
554
562
return false
555
563
}
556
564
}
557
565
return true
558
- }
566
+ })
559
567
}
560
568
561
569
func Or (p ... OperatorPredicate ) OperatorPredicate {
562
- return func (o * Operator ) bool {
570
+ return OperatorPredicateFunc ( func (o * Operator ) bool {
563
571
for _ , l := range p {
564
- if l (o ) == true {
572
+ if l . Test (o ) == true {
565
573
return true
566
574
}
567
575
}
568
576
return false
569
- }
577
+ })
570
578
}
571
579
572
580
func AtLeast (n int , operators []* Operator ) ([]* Operator , error ) {
@@ -594,5 +602,21 @@ func Filter(operators []*Operator, p ...OperatorPredicate) []*Operator {
594
602
}
595
603
596
604
func Matches (o * Operator , p ... OperatorPredicate ) bool {
597
- return And (p ... )(o )
605
+ return And (p ... ).Test (o )
606
+ }
607
+
608
+ func True () OperatorPredicate {
609
+ return OperatorPredicateFunc (func (* Operator ) bool {
610
+ return true
611
+ })
612
+ }
613
+
614
+ func CountingPredicate (p OperatorPredicate , n * int ) OperatorPredicate {
615
+ return OperatorPredicateFunc (func (o * Operator ) bool {
616
+ if p .Test (o ) {
617
+ * n ++
618
+ return true
619
+ }
620
+ return false
621
+ })
598
622
}
0 commit comments