45 lines
749 B
Go
45 lines
749 B
Go
package provider
|
|
|
|
import (
|
|
"github.com/andig/evcc/util"
|
|
)
|
|
|
|
type calcProvider struct {
|
|
add []func() (float64, error)
|
|
}
|
|
|
|
// NewCalcFromConfig creates calc provider
|
|
func NewCalcFromConfig(other map[string]interface{}) (func() (float64, error), error) {
|
|
cc := struct {
|
|
Add []Config
|
|
}{}
|
|
|
|
if err := util.DecodeOther(other, &cc); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
o := &calcProvider{}
|
|
|
|
for _, cc := range cc.Add {
|
|
f, err := NewFloatGetterFromConfig(cc)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
o.add = append(o.add, f)
|
|
}
|
|
|
|
return o.floatGetter, nil
|
|
}
|
|
|
|
func (o *calcProvider) floatGetter() (float64, error) {
|
|
var sum float64
|
|
for _, p := range o.add {
|
|
v, err := p()
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
sum += v
|
|
}
|
|
|
|
return sum, nil
|
|
}
|