Skip to content

Commit d0c0038

Browse files
committed
add functionality to override service in registry
1 parent 6f9c024 commit d0c0038

File tree

1 file changed

+34
-3
lines changed

1 file changed

+34
-3
lines changed

pkg/registry/registry.go

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,42 @@ func Register(descriptor *Descriptor) {
2929
}
3030

3131
func GetServices() []*Descriptor {
32-
sort.Slice(services, func(i, j int) bool {
33-
return services[i].InitPriority > services[j].InitPriority
32+
slice := getServicesWithOverrides()
33+
34+
sort.Slice(slice, func(i, j int) bool {
35+
return slice[i].InitPriority > slice[j].InitPriority
3436
})
3537

36-
return services
38+
return slice
39+
}
40+
41+
type OverrideServiceFunc func(descriptor Descriptor) (*Descriptor, bool)
42+
43+
var overrides []OverrideServiceFunc
44+
45+
func RegisterOverride(fn OverrideServiceFunc) {
46+
overrides = append(overrides, fn)
47+
}
48+
49+
func getServicesWithOverrides() []*Descriptor {
50+
slice := []*Descriptor{}
51+
for _, s := range services {
52+
var descriptor *Descriptor
53+
for _, fn := range overrides {
54+
if newDescriptor, override := fn(*s); override {
55+
descriptor = newDescriptor
56+
break
57+
}
58+
}
59+
60+
if descriptor != nil {
61+
slice = append(slice, descriptor)
62+
} else {
63+
slice = append(slice, s)
64+
}
65+
}
66+
67+
return slice
3768
}
3869

3970
// Service interface is the lowest common shape that services

0 commit comments

Comments
 (0)