Plugins: add ifelse plugin (#29988)
This commit is contained in:
parent
1e40a2aa9d
commit
ce583cde3c
1 changed files with 78 additions and 0 deletions
78
plugin/ifelse.go
Normal file
78
plugin/ifelse.go
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
package plugin
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/evcc-io/evcc/util"
|
||||
)
|
||||
|
||||
type ifElsePlugin struct {
|
||||
ctx context.Context
|
||||
i, e Config
|
||||
}
|
||||
|
||||
func init() {
|
||||
registry.AddCtx("ifelse", NewIfElseFromConfig)
|
||||
}
|
||||
|
||||
// NewIfElseFromConfig creates ifElse provider
|
||||
func NewIfElseFromConfig(ctx context.Context, other map[string]any) (Plugin, error) {
|
||||
var cc struct {
|
||||
I Config `mapstructure:"if"`
|
||||
E Config `mapstructure:"else"`
|
||||
}
|
||||
|
||||
if err := util.DecodeOther(other, &cc); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
o := &ifElsePlugin{
|
||||
ctx: ctx,
|
||||
i: cc.I,
|
||||
e: cc.E,
|
||||
}
|
||||
|
||||
return o, nil
|
||||
}
|
||||
|
||||
var _ IntSetter = (*ifElsePlugin)(nil)
|
||||
|
||||
func (o *ifElsePlugin) IntSetter(param string) (func(int64) error, error) {
|
||||
ifS, err := o.i.IntSetter(o.ctx, param)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
elseS, err := o.e.IntSetter(o.ctx, param)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return func(val int64) error {
|
||||
if val > 0 {
|
||||
return ifS(val)
|
||||
}
|
||||
return elseS(val)
|
||||
}, nil
|
||||
}
|
||||
|
||||
var _ BoolSetter = (*ifElsePlugin)(nil)
|
||||
|
||||
func (o *ifElsePlugin) BoolSetter(param string) (func(bool) error, error) {
|
||||
ifS, err := o.i.BoolSetter(o.ctx, param)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
elseS, err := o.e.BoolSetter(o.ctx, param)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return func(val bool) error {
|
||||
if val {
|
||||
return ifS(val)
|
||||
}
|
||||
return elseS(val)
|
||||
}, nil
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue