func ListAction() Action {
	return listAction
}
ListAction represents the list action
package plugin
type MethodSignature int
const (
	UnsupportedSignature MethodSignature = iota
	DefaultSignature
	BlockReadableSignature
)
type Action struct {
	Name                         string `json:"name"`
	Protocol                     string `json:"protocol"`
	corePluginEntrySignatureFunc func(e Entry) MethodSignature
}
var actions = make(map[string]Action)
func newAction(name string, protocol string, corePluginEntrySignatureFunc func(e Entry) MethodSignature) Action {
	a := Action{
		Name:                         name,
		Protocol:                     protocol,
		corePluginEntrySignatureFunc: corePluginEntrySignatureFunc,
	}
	actions[a.Name] = a
	return a
}
func (a Action) IsSupportedOn(entry Entry) bool {
	return a.signature(entry) != UnsupportedSignature
}
func (a Action) signature(entry Entry) MethodSignature {
	switch t := entry.(type) {
	case externalPlugin:
		return t.MethodSignature(a.Name)
	default:
		return a.corePluginEntrySignatureFunc(entry)
	}
}
var listAction = newAction("list", "Parent", func(e Entry) MethodSignature {
	if _, ok := e.(Parent); ok {
		return DefaultSignature
	}
	return UnsupportedSignature
})
var readAction = newAction("read", "Readable", func(e Entry) MethodSignature {
	if _, ok := e.(Readable); ok {
		return DefaultSignature
	}
	if _, ok := e.(BlockReadable); ok {
		return BlockReadableSignature
	}
	return UnsupportedSignature
})
var streamAction = newAction("stream", "Streamable", func(e Entry) MethodSignature {
	if _, ok := e.(Streamable); ok {
		return DefaultSignature
	}
	return UnsupportedSignature
})
var writeAction = newAction("write", "Writable", func(e Entry) MethodSignature {
	if _, ok := e.(Writable); ok {
		return DefaultSignature
	}
	return UnsupportedSignature
})
var execAction = newAction("exec", "Execable", func(e Entry) MethodSignature {
	if _, ok := e.(Execable); ok {
		return DefaultSignature
	}
	return UnsupportedSignature
})
var deleteAction = newAction("delete", "Deletable", func(e Entry) MethodSignature {
	if _, ok := e.(Deletable); ok {
		return DefaultSignature
	}
	return UnsupportedSignature
})
var signalAction = newAction("signal", "Signalable", func(e Entry) MethodSignature {
	if _, ok := e.(Signalable); ok {
		return DefaultSignature
	}
	return UnsupportedSignature
})