44 lines
787 B
Go
44 lines
787 B
Go
package plugin
|
|
|
|
import (
|
|
"github.com/evcc-io/evcc/plugin/pipeline"
|
|
"github.com/evcc-io/evcc/util"
|
|
)
|
|
|
|
type msgHandler struct {
|
|
topic string
|
|
pipeline *pipeline.Pipeline
|
|
val *util.Monitor[string]
|
|
}
|
|
|
|
func (h *msgHandler) receive(payload string) {
|
|
h.val.Set(payload)
|
|
}
|
|
|
|
// hasValue returned the received and processed payload as string
|
|
func (h *msgHandler) hasValue() (string, error) {
|
|
payload, err := h.val.Get()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
if err := knownErrors([]byte(payload)); err != nil {
|
|
return "", err
|
|
}
|
|
|
|
if h.pipeline != nil {
|
|
b, err := h.pipeline.Process([]byte(payload))
|
|
return string(b), err
|
|
}
|
|
|
|
return payload, nil
|
|
}
|
|
|
|
func (h *msgHandler) value() (string, error) {
|
|
v, err := h.hasValue()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return v, nil
|
|
}
|