evcc-io/provider/javascript.go
2020-12-08 14:09:51 +01:00

95 lines
1.9 KiB
Go

package provider
import (
"github.com/andig/evcc/util"
"github.com/robertkrimen/otto"
)
// Javascript implements Javascript request provider
type Javascript struct {
log *util.Logger
vm *otto.Otto
script string
}
// NewJavascriptProviderFromConfig creates a HTTP provider
func NewJavascriptProviderFromConfig(other map[string]interface{}) (*Javascript, error) {
cc := struct {
Script string
}{}
if err := util.DecodeOther(other, &cc); err != nil {
return nil, err
}
log := util.NewLogger("js")
p := &Javascript{
log: log,
vm: otto.New(),
script: cc.Script,
}
return p, nil
}
// FloatGetter parses float from request
func (p *Javascript) FloatGetter() (res float64, err error) {
v, err := p.vm.Eval(p.script)
if err == nil {
res, err = v.ToFloat()
}
return res, err
}
// IntGetter parses int64 from request
func (p *Javascript) IntGetter() (res int64, err error) {
v, err := p.vm.Eval(p.script)
if err == nil {
res, err = v.ToInteger()
}
return res, err
}
// StringGetter sends string request
func (p *Javascript) StringGetter() (res string, err error) {
v, err := p.vm.Eval(p.script)
if err == nil {
res, err = v.ToString()
}
return res, err
}
// BoolGetter parses bool from request
func (p *Javascript) BoolGetter() (res bool, err error) {
v, err := p.vm.Eval(p.script)
if err == nil {
res, err = v.ToBoolean()
}
return res, err
}
// // IntSetter sends int request
// func (p *Javascript) IntSetter(param int64) error {
// body := util.FormatValue(p.body, param)
// _, err := p.request(body)
// return err
// }
// // StringSetter sends string request
// func (p *Javascript) StringSetter(param string) error {
// body := util.FormatValue(p.body, param)
// _, err := p.request(body)
// return err
// }
// // BoolSetter sends bool request
// func (p *Javascript) BoolSetter(param bool) error {
// body := util.FormatValue(p.body, param)
// _, err := p.request(body)
// return err
// }