chore: refactor plugin structure (#18335)

This commit is contained in:
andig 2025-01-23 14:43:04 +01:00 • committed by GitHub
parent 9127e1a913
commit 07fa1b64f8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
127 changed files with 861 additions and 938 deletions

72
plugin/mqtt_timeout.go Normal file
View file

@ -0,0 +1,72 @@
package plugin
import "encoding/json"
// TimeoutHandler is a wrapper for a Getter that times out after a given duration
type TimeoutHandler struct {
ticker func() (string, error)
}
func NewTimeoutHandler(ticker func() (string, error)) *TimeoutHandler {
return &TimeoutHandler{ticker}
}
func (h *TimeoutHandler) BoolGetter(p BoolGetter) (func() (bool, error), error) {
g, err := p.BoolGetter()
if err != nil {
return nil, err
}
return func() (val bool, err error) {
if val, err = g(); err == nil {
_, err = h.ticker()
}
return val, err
}, nil
}
func (h *TimeoutHandler) FloatGetter(p FloatGetter) (func() (float64, error), error) {
g, err := p.FloatGetter()
if err != nil {
return nil, err
}
return func() (val float64, err error) {
if val, err = g(); err == nil {
_, err = h.ticker()
}
return val, err
}, nil
}
func (h *TimeoutHandler) StringGetter(p StringGetter) (func() (string, error), error) {
g, err := p.StringGetter()
if err != nil {
return nil, err
}
return func() (val string, err error) {
if val, err = g(); err == nil {
_, err = h.ticker()
}
return val, err
}, nil
}
func (h *TimeoutHandler) JsonGetter(p StringGetter) (func(any) error, error) {
g, err := p.StringGetter()
if err != nil {
return nil, err
}
return func(res any) error {
val, err := g()
if err != nil {
return err
}
if _, err := h.ticker(); err != nil {
return err
}
return json.Unmarshal([]byte(val), res)
}, nil
}