chore: improve errors.As usage (#18794)
This commit is contained in:
parent
6eef37131b
commit
760b65761d
11 changed files with 22 additions and 30 deletions
|
|
@ -20,8 +20,7 @@ func wait(err error, rc chan error) error {
|
|||
close(rc)
|
||||
}
|
||||
|
||||
oe := new(ocpp.Error)
|
||||
if errors.As(err, &oe) && oe.Code == ocppj.GenericError {
|
||||
if oe := new(ocpp.Error); errors.As(err, &oe) && oe.Code == ocppj.GenericError {
|
||||
err = api.ErrTimeout
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -81,8 +81,7 @@ func (e ClassError) MarshalJSON() ([]byte, error) {
|
|||
Error: e.err.Error(),
|
||||
}
|
||||
|
||||
var de *DeviceError
|
||||
if errors.As(e.err, &de) {
|
||||
if de := new(DeviceError); errors.As(e.err, &de) {
|
||||
res.Device = de.Name
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -345,8 +345,7 @@ func vehicleInstance(cc config.Named) (api.Vehicle, error) {
|
|||
|
||||
instance, err := vehicle.NewFromConfig(ctx, cc.Type, cc.Other)
|
||||
if err != nil {
|
||||
var ce *util.ConfigError
|
||||
if errors.As(err, &ce) {
|
||||
if ce := new(util.ConfigError); errors.As(err, &ce) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
|
|
@ -742,8 +741,7 @@ func tariffInstance(name string, conf config.Typed) (api.Tariff, error) {
|
|||
|
||||
instance, err := tariff.NewFromConfig(ctx, conf.Type, conf.Other)
|
||||
if err != nil {
|
||||
var ce *util.ConfigError
|
||||
if errors.As(err, &ce) {
|
||||
if ce := new(util.ConfigError); errors.As(err, &ce) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -150,8 +150,7 @@ func (m *Com) update(meterData any) error {
|
|||
|
||||
if err := m.DoJSON(req, meterData); err != nil {
|
||||
// re-login if request returns 405-error
|
||||
var se request.StatusError
|
||||
if errors.As(err, &se) && se.StatusCode() == http.StatusMethodNotAllowed {
|
||||
if se := new(request.StatusError); errors.As(err, &se) && se.StatusCode() == http.StatusMethodNotAllowed {
|
||||
if err := m.Login(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -44,9 +44,8 @@ func (h *handler) logResult(op string, b []byte, err error) {
|
|||
func (h *handler) exceptionToUint16AndError(op string, b []byte, err error) ([]uint16, error) {
|
||||
h.logResult(op, b, err)
|
||||
|
||||
var modbusError *gridx.Error
|
||||
if errors.As(err, &modbusError) {
|
||||
err = mbserver.MapExceptionCodeToError(modbusError.ExceptionCode)
|
||||
if me := new(gridx.Error); errors.As(err, &me) {
|
||||
err = mbserver.MapExceptionCodeToError(me.ExceptionCode)
|
||||
}
|
||||
|
||||
return bytesAsUint16(b), err
|
||||
|
|
@ -75,9 +74,8 @@ func coilsToBytes(b []bool) []byte {
|
|||
func (h *handler) bytesToBoolResult(op string, qty uint16, b []byte, err error) ([]bool, error) {
|
||||
h.logResult(op, b, err)
|
||||
|
||||
var modbusError *gridx.Error
|
||||
if errors.As(err, &modbusError) {
|
||||
err = mbserver.MapExceptionCodeToError(modbusError.ExceptionCode)
|
||||
if me := new(gridx.Error); errors.As(err, &me) {
|
||||
err = mbserver.MapExceptionCodeToError(me.ExceptionCode)
|
||||
}
|
||||
|
||||
var res []bool
|
||||
|
|
|
|||
|
|
@ -20,8 +20,7 @@ func bo() backoff.BackOff {
|
|||
|
||||
// backoffPermanentError returns a permanent error in case of HTTP 400
|
||||
func backoffPermanentError(err error) error {
|
||||
var se request.StatusError
|
||||
if errors.As(err, &se) {
|
||||
if se := new(request.StatusError); errors.As(err, &se) {
|
||||
if code := se.StatusCode(); code >= 400 && code <= 599 {
|
||||
return backoff.Permanent(se)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,22 +43,22 @@ type StatusError struct {
|
|||
resp *http.Response
|
||||
}
|
||||
|
||||
func (e StatusError) Error() string {
|
||||
func (e *StatusError) Error() string {
|
||||
return fmt.Sprintf("unexpected status: %d (%s)", e.resp.StatusCode, http.StatusText(e.resp.StatusCode))
|
||||
}
|
||||
|
||||
// Response returns the response with the unexpected error
|
||||
func (e StatusError) Response() *http.Response {
|
||||
func (e *StatusError) Response() *http.Response {
|
||||
return e.resp
|
||||
}
|
||||
|
||||
// StatusCode returns the response's status code
|
||||
func (e StatusError) StatusCode() int {
|
||||
func (e *StatusError) StatusCode() int {
|
||||
return e.resp.StatusCode
|
||||
}
|
||||
|
||||
// HasStatus returns true if the response's status code matches any of the given codes
|
||||
func (e StatusError) HasStatus(codes ...int) bool {
|
||||
func (e *StatusError) HasStatus(codes ...int) bool {
|
||||
for _, code := range codes {
|
||||
if e.resp.StatusCode == code {
|
||||
return true
|
||||
|
|
@ -70,7 +70,7 @@ func (e StatusError) HasStatus(codes ...int) bool {
|
|||
// ResponseError turns an HTTP status code into an error
|
||||
func ResponseError(resp *http.Response) error {
|
||||
if resp.StatusCode < 200 || resp.StatusCode >= 300 {
|
||||
return StatusError{resp: resp}
|
||||
return &StatusError{resp: resp}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
@ -85,7 +85,7 @@ func ReadBody(resp *http.Response) ([]byte, error) {
|
|||
}
|
||||
|
||||
if resp.StatusCode < 200 || resp.StatusCode >= 300 {
|
||||
return b, StatusError{resp: resp}
|
||||
return b, &StatusError{resp: resp}
|
||||
}
|
||||
|
||||
return b, nil
|
||||
|
|
|
|||
|
|
@ -52,8 +52,7 @@ func (v *Provider) deepRefresh() error {
|
|||
if err == nil && res.ResponseStatus != "pending" {
|
||||
err = fmt.Errorf("invalid response status: %s", res.ResponseStatus)
|
||||
} else {
|
||||
var se request.StatusError
|
||||
if errors.As(err, &se) && se.StatusCode() == http.StatusForbidden {
|
||||
if se := new(request.StatusError); errors.As(err, &se) && se.StatusCode() == http.StatusForbidden {
|
||||
err = nil
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package renault
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"net/http"
|
||||
"slices"
|
||||
"strings"
|
||||
|
|
@ -140,7 +141,7 @@ func (v *Provider) Climater() (bool, error) {
|
|||
res, err := v.hvacG()
|
||||
|
||||
// Zoe Ph2, Megane e-tech
|
||||
if err, ok := err.(request.StatusError); ok && err.HasStatus(http.StatusForbidden, http.StatusNotFound, http.StatusBadGateway) {
|
||||
if se := new(request.StatusError); errors.As(err, &se) && se.HasStatus(http.StatusForbidden, http.StatusNotFound, http.StatusBadGateway) {
|
||||
return false, api.ErrNotAvailable
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -224,8 +224,7 @@ func (v *Tronity) post(uri string) error {
|
|||
}
|
||||
|
||||
// ignore HTTP 405
|
||||
var se request.StatusError
|
||||
if errors.As(err, &se) && se.StatusCode() == http.StatusMethodNotAllowed {
|
||||
if se := new(request.StatusError); errors.As(err, &se) && se.StatusCode() == http.StatusMethodNotAllowed {
|
||||
err = nil
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package vw
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
|
@ -99,7 +100,7 @@ func (v *API) Status(vin string) (StatusResponse, error) {
|
|||
err = v.DoJSON(req, &res)
|
||||
}
|
||||
|
||||
if _, ok := err.(request.StatusError); ok {
|
||||
if se := new(request.StatusError); errors.As(err, &se) {
|
||||
var rr RolesRights
|
||||
rr, err = v.RolesRights(vin)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue