MCPcopy
hub / github.com/dragonflyoss/dragonfly / Load

Function Load

internal/dfplugin/dfplugin.go:53–88  ·  view source on GitHub ↗
(dir string, typ PluginType, name string, option map[string]string)

Source from the content-addressed store, hash-verified

51type PluginInitFunc func(option map[string]string) (plugin any, meta map[string]string, err error)
52
53func Load(dir string, typ PluginType, name string, option map[string]string) (any, map[string]string, error) {
54 soName := fmt.Sprintf(PluginFormat, string(typ), name)
55 p, err := plugin.Open(path.Join(dir, soName))
56 if err != nil {
57 return nil, nil, err
58 }
59
60 symbol, err := p.Lookup(PluginInitFuncName)
61 if err != nil {
62 return nil, nil, err
63 }
64
65 // FIXME when use symbol.(PluginInitFunc), ok is always false
66 f, ok := symbol.(func(option map[string]string) (plugin any, meta map[string]string, err error))
67 if !ok {
68 return nil, nil, errors.New("invalid plugin init function signature")
69 }
70
71 i, meta, err := f(option)
72 if err != nil {
73 return nil, nil, err
74 }
75
76 if meta == nil {
77 return nil, nil, errors.New("empty plugin metadata")
78 }
79
80 if meta[PluginMetaKeyType] != string(typ) {
81 return nil, nil, errors.New("plugin type not match")
82 }
83
84 if meta[PluginMetaKeyName] != name {
85 return nil, nil, errors.New("plugin name not match")
86 }
87 return i, meta, nil
88}

Callers 3

LoadPluginFunction · 0.92
LoadPluginFunction · 0.92

Calls

no outgoing calls

Tested by

no test coverage detected