sharded-gotify/plugin/compat/instance.go

92 lines
2.1 KiB
Go

package compat
import (
"net/url"
"github.com/gin-gonic/gin"
)
// Capability is a capability the plugin provides
type Capability string
const (
// Messenger sends notifications
Messenger = Capability("messenger")
// Configurer are consigurables
Configurer = Capability("configurer")
// Storager stores data
Storager = Capability("storager")
// Webhooker registers webhooks
Webhooker = Capability("webhooker")
// Displayer displays instructions
Displayer = Capability("displayer")
)
// PluginInstance is an encapsulation layer of plugin instances of different backends
type PluginInstance interface {
Enable() error
Disable() error
// GetDisplay see Displayer
GetDisplay(location *url.URL) string
// DefaultConfig see Configurer
DefaultConfig() interface{}
// ValidateAndSetConfig see Configurer
ValidateAndSetConfig(c interface{}) error
// SetMessageHandler see Messenger#SetMessageHandler
SetMessageHandler(h MessageHandler)
// RegisterWebhook see Webhooker#RegisterWebhook
RegisterWebhook(basePath string, mux *gin.RouterGroup)
// SetStorageHandler see Storager#SetStorageHandler.
SetStorageHandler(handler StorageHandler)
// Returns the supported modules, f.ex. storager
Supports() Capabilities
}
// HasSupport tests a PluginInstance for a capability
func HasSupport(p PluginInstance, toCheck Capability) bool {
for _, module := range p.Supports() {
if module == toCheck {
return true
}
}
return false
}
// Capabilities is a slice of module
type Capabilities []Capability
// Strings converts []Module to []string
func (m Capabilities) Strings() []string {
var result []string
for _, module := range m {
result = append(result, string(module))
}
return result
}
// MessageHandler see plugin.MessageHandler.
type MessageHandler interface {
// SendMessage see plugin.MessageHandler
SendMessage(msg Message) error
}
// StorageHandler see plugin.StorageHandler.
type StorageHandler interface {
Save(b []byte) error
Load() ([]byte, error)
}
// Message describes a message to be send by MessageHandler#SendMessage.
type Message struct {
Message string
Title string
Priority int
Extras map[string]interface{}
}