@@ -7,16 +7,19 @@ import (
7
7
"sync"
8
8
9
9
"github.com/lima-vm/lima/pkg/driver"
10
+ "github.com/sirupsen/logrus"
10
11
)
11
12
12
13
type Registry struct {
13
- drivers map [string ]driver.Driver
14
- mu sync.RWMutex
14
+ drivers map [string ]driver.Driver
15
+ externalDrivers map [string ]string // For now mapping external driver names to paths
16
+ mu sync.RWMutex
15
17
}
16
18
17
19
func NewRegistry () * Registry {
18
20
return & Registry {
19
- drivers : make (map [string ]driver.Driver ),
21
+ drivers : make (map [string ]driver.Driver ),
22
+ externalDrivers : make (map [string ]string ),
20
23
}
21
24
}
22
25
@@ -28,6 +31,10 @@ func (r *Registry) List() []string {
28
31
for name := range r .drivers {
29
32
names = append (names , name )
30
33
}
34
+
35
+ for name := range r .externalDrivers {
36
+ names = append (names , name + " (external)" )
37
+ }
31
38
return names
32
39
}
33
40
@@ -39,6 +46,32 @@ func (r *Registry) Get(name string) (driver.Driver, bool) {
39
46
return driver , exists
40
47
}
41
48
49
+ func (r * Registry ) GetExternalDriver (name string ) (string , bool ) {
50
+ r .mu .RLock ()
51
+ defer r .mu .RUnlock ()
52
+
53
+ plugin , exists := r .externalDrivers [name ]
54
+ return plugin , exists
55
+ }
56
+
57
+ func (r * Registry ) RegisterPlugin (name , path string ) {
58
+ r .mu .Lock ()
59
+ defer r .mu .Unlock ()
60
+
61
+ if _ , exists := r .externalDrivers [name ]; exists {
62
+ logrus .Debugf ("Plugin %q is already registered, skipping" , name )
63
+ return
64
+ }
65
+
66
+ r .externalDrivers [name ] = path
67
+ logrus .Debugf ("Registered plugin %q at %s" , name , path )
68
+ }
69
+
70
+ func (r * Registry ) DiscoverPlugins () error {
71
+ // TODO: Implement plugin discovery logic
72
+ return nil
73
+ }
74
+
42
75
var DefaultRegistry * Registry
43
76
44
77
func init () {
0 commit comments