163 lines
3 KiB
Go
163 lines
3 KiB
Go
package plugin
|
|
|
|
import (
|
|
"context"
|
|
"encoding/hex"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/evcc-io/evcc/plugin/pipeline"
|
|
"github.com/evcc-io/evcc/util"
|
|
)
|
|
|
|
type constPlugin struct {
|
|
ctx context.Context
|
|
str string
|
|
set Config
|
|
}
|
|
|
|
func init() {
|
|
registry.AddCtx("const", NewConstFromConfig)
|
|
}
|
|
|
|
// NewConstFromConfig creates const provider
|
|
func NewConstFromConfig(ctx context.Context, other map[string]interface{}) (Plugin, error) {
|
|
var cc struct {
|
|
Value string
|
|
pipeline.Settings `mapstructure:",squash"`
|
|
Set Config
|
|
}
|
|
|
|
if err := util.DecodeOther(other, &cc); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
p := &constPlugin{
|
|
ctx: ctx,
|
|
str: cc.Value,
|
|
set: cc.Set,
|
|
}
|
|
|
|
return p, nil
|
|
}
|
|
|
|
var _ StringGetter = (*constPlugin)(nil)
|
|
|
|
func (p *constPlugin) StringGetter() (func() (string, error), error) {
|
|
return func() (string, error) {
|
|
return p.str, nil
|
|
}, nil
|
|
}
|
|
|
|
var _ IntGetter = (*constPlugin)(nil)
|
|
|
|
func (p *constPlugin) IntGetter() (func() (int64, error), error) {
|
|
val, err := strconv.ParseInt(p.str, 10, 64)
|
|
if err != nil && p.str == "" {
|
|
err = nil
|
|
}
|
|
|
|
return func() (int64, error) {
|
|
return val, err
|
|
}, err
|
|
}
|
|
|
|
var _ FloatGetter = (*constPlugin)(nil)
|
|
|
|
func (p *constPlugin) FloatGetter() (func() (float64, error), error) {
|
|
val, err := strconv.ParseFloat(p.str, 64)
|
|
if err != nil && p.str == "" {
|
|
err = nil
|
|
}
|
|
|
|
return func() (float64, error) {
|
|
return val, err
|
|
}, err
|
|
}
|
|
|
|
var _ BoolGetter = (*constPlugin)(nil)
|
|
|
|
func (p *constPlugin) BoolGetter() (func() (bool, error), error) {
|
|
val, err := strconv.ParseBool(p.str)
|
|
if err != nil && p.str == "" {
|
|
err = nil
|
|
}
|
|
|
|
return func() (bool, error) {
|
|
return val, err
|
|
}, err
|
|
}
|
|
|
|
var _ IntSetter = (*constPlugin)(nil)
|
|
|
|
func (p *constPlugin) IntSetter(param string) (func(int64) error, error) {
|
|
set, err := p.set.IntSetter(p.ctx, param)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
val, err := strconv.ParseInt(p.str, 10, 64)
|
|
if err != nil && p.str == "" {
|
|
err = nil
|
|
}
|
|
|
|
return func(_ int64) error {
|
|
return set(val)
|
|
}, err
|
|
}
|
|
|
|
var _ FloatSetter = (*constPlugin)(nil)
|
|
|
|
func (p *constPlugin) FloatSetter(param string) (func(float64) error, error) {
|
|
set, err := p.set.FloatSetter(p.ctx, param)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
val, err := strconv.ParseFloat(p.str, 64)
|
|
if err != nil && p.str == "" {
|
|
err = nil
|
|
}
|
|
|
|
return func(_ float64) error {
|
|
return set(val)
|
|
}, err
|
|
}
|
|
|
|
var _ BoolSetter = (*constPlugin)(nil)
|
|
|
|
func (p *constPlugin) BoolSetter(param string) (func(bool) error, error) {
|
|
set, err := p.set.BoolSetter(p.ctx, param)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
val, err := strconv.ParseBool(p.str)
|
|
if err != nil && p.str == "" {
|
|
err = nil
|
|
}
|
|
|
|
return func(_ bool) error {
|
|
return set(val)
|
|
}, err
|
|
}
|
|
|
|
var _ BytesSetter = (*constPlugin)(nil)
|
|
|
|
func (p *constPlugin) BytesSetter(param string) (func([]byte) error, error) {
|
|
set, err := p.set.BytesSetter(p.ctx, param)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
str := strings.ReplaceAll(strings.TrimPrefix(p.str, "0x"), "_", "")
|
|
|
|
val, err := hex.DecodeString(str)
|
|
if err != nil {
|
|
err = nil
|
|
}
|
|
|
|
return func(_ []byte) error {
|
|
return set(val)
|
|
}, err
|
|
}
|