evcc-io/vehicle/wrapper/wrapper.go

81 lines
1.7 KiB
Go

package wrapper
import (
"fmt"
"github.com/evcc-io/evcc/api"
)
// Wrapper wraps an api.Vehicle to capture initialization errors
type Wrapper struct {
err error
title string
Features_ []api.Feature
}
// New creates a new Vehicle
func New(err error) api.Vehicle {
v := &Wrapper{
err: fmt.Errorf("vehicle not available: %w", err),
title: "unavailable",
Features_: []api.Feature{api.Offline},
}
return v
}
var _ api.Vehicle = (*Wrapper)(nil)
// Title implements the api.Vehicle interface
func (v *Wrapper) Title() string {
return v.title
}
// SetTitle implements the api.TitleSetter interface
func (v *Wrapper) SetTitle(title string) {
v.title = fmt.Sprintf("%s (unavailable)", title)
}
// Icon implements the api.Vehicle interface
func (v *Wrapper) Icon() string {
return ""
}
// Capacity implements the api.Vehicle interface
func (v *Wrapper) Capacity() float64 {
return 0
}
// Phases implements the api.Vehicle interface
func (v *Wrapper) Phases() int {
return 0
}
// Identifiers implements the api.Vehicle interface
func (v *Wrapper) Identifiers() []string {
return nil
}
// OnIdentified implements the api.Vehicle interface
func (v *Wrapper) OnIdentified() api.ActionConfig {
return api.ActionConfig{}
}
var _ api.FeatureDescriber = (*Wrapper)(nil)
// Features implements the api.FeatureDescriber interface
func (v *Wrapper) Features() []api.Feature {
return []api.Feature{api.Offline}
}
// Features implements the api.FeatureDescriber interface
func (v *Wrapper) Has(f api.Feature) bool {
return f == api.Offline
}
var _ api.Battery = (*Wrapper)(nil)
// Soc implements the api.Battery interface
func (v *Wrapper) Soc() (float64, error) {
return 0, v.err
}