omada-api/utils.go
2025-02-04 21:46:37 +01:00

50 lines
1.3 KiB
Go

package omadaapi
import (
"fmt"
"git.tordarus.net/tordarus/omada-api/model"
)
const ErrCodeAccessTokenExpired = -44112
func handleResponseErrors[T any](api *Api, response *model.Response[T], retry func() (*model.Response[T], error)) (*model.Response[T], error) {
switch response.ErrorCode {
case 0:
return response, nil
case ErrCodeAccessTokenExpired:
if err := api.Refresh(); err != nil {
return nil, fmt.Errorf("could not refresh access token: %w", err)
}
newResp, err := retry()
if err != nil {
return nil, err
}
return handleResponseErrors(api, newResp, retry)
default:
return nil, fmt.Errorf("invalid error code %d with message: %s", response.ErrorCode, response.Message)
}
}
func handlePagedResponseErrors[T any](api *Api, response *model.PagedResponse[T], retry func() (*model.PagedResponse[T], error)) (*model.PagedResponse[T], error) {
switch response.ErrorCode {
case 0:
return response, nil
case ErrCodeAccessTokenExpired:
if err := api.Refresh(); err != nil {
return nil, fmt.Errorf("could not refresh access token: %w", err)
}
newResp, err := retry()
if err != nil {
return nil, err
}
return handlePagedResponseErrors(api, newResp, retry)
default:
return nil, fmt.Errorf("invalid error code %d with message: %s", response.ErrorCode, response.Message)
}
}