78 lines
1.3 KiB
Go
78 lines
1.3 KiB
Go
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
|
|
}
|