package convert import ( "github.com/moby/moby/v2/pkg/plugingetter" "github.com/moby/swarmkit/v2/node/plugin" ) // SwarmPluginGetter adapts a plugingetter.PluginGetter to a Swarmkit plugin.Getter. func SwarmPluginGetter(pg plugingetter.PluginGetter) plugin.Getter { return pluginGetter{pg} } type pluginGetter struct { pg plugingetter.PluginGetter } var _ plugin.Getter = (*pluginGetter)(nil) type swarmPlugin struct { plugingetter.CompatPlugin } func (p swarmPlugin) Client() plugin.Client { return p.CompatPlugin.Client() } type addrPlugin struct { plugingetter.CompatPlugin plugingetter.PluginAddr } var _ plugin.AddrPlugin = (*addrPlugin)(nil) func (p addrPlugin) Client() plugin.Client { return p.CompatPlugin.Client() } func adaptPluginForSwarm(p plugingetter.CompatPlugin) plugin.Plugin { if pa, ok := p.(plugingetter.PluginAddr); ok { return addrPlugin{p, pa} } return swarmPlugin{p} } func (g pluginGetter) Get(name string, capability string) (plugin.Plugin, error) { p, err := g.pg.Get(name, capability, plugingetter.Lookup) if err != nil { return nil, err } return adaptPluginForSwarm(p), nil } func (g pluginGetter) GetAllManagedPluginsByCap(capability string) []plugin.Plugin { pp := g.pg.GetAllManagedPluginsByCap(capability) ret := make([]plugin.Plugin, len(pp)) for i, p := range pp { ret[i] = adaptPluginForSwarm(p) } return ret }