mirror of
https://github.com/dstotijn/go-notion.git
synced 2025-06-17 00:07:45 +02:00
Simplify APIError.Unwrap, fix missing error message prefixes
This commit is contained in:
@ -91,22 +91,22 @@ type DatabaseProperty struct {
|
|||||||
func (c *Client) FindDatabaseByID(id string) (db Database, err error) {
|
func (c *Client) FindDatabaseByID(id string) (db Database, err error) {
|
||||||
req, err := c.newRequest("GET", "/databases/"+id, nil)
|
req, err := c.newRequest("GET", "/databases/"+id, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return Database{}, fmt.Errorf("invalid URL: %w", err)
|
return Database{}, fmt.Errorf("notion: invalid URL: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
res, err := c.httpClient.Do(req)
|
res, err := c.httpClient.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return Database{}, fmt.Errorf("failed to make HTTP request: %w", err)
|
return Database{}, fmt.Errorf("notion: failed to make HTTP request: %w", err)
|
||||||
}
|
}
|
||||||
defer res.Body.Close()
|
defer res.Body.Close()
|
||||||
|
|
||||||
if res.StatusCode != 200 {
|
if res.StatusCode != 200 {
|
||||||
return Database{}, fmt.Errorf("notion: failed to get database: %w", parseErrorResponse(res))
|
return Database{}, fmt.Errorf("notion: failed to find database: %w", parseErrorResponse(res))
|
||||||
}
|
}
|
||||||
|
|
||||||
err = json.NewDecoder(res.Body).Decode(&db)
|
err = json.NewDecoder(res.Body).Decode(&db)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return Database{}, fmt.Errorf("failed to parse HTTP response: %w", err)
|
return Database{}, fmt.Errorf("notion: failed to parse HTTP response: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
return db, nil
|
return db, nil
|
||||||
|
44
error.go
44
error.go
@ -22,6 +22,20 @@ var (
|
|||||||
ErrServiceUnavailable = errors.New("notion: service is unavailable")
|
ErrServiceUnavailable = errors.New("notion: service is unavailable")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var errMap = map[string]error{
|
||||||
|
"invalid_json": ErrInvalidJSON,
|
||||||
|
"invalid_request_url": ErrInvalidRequestURL,
|
||||||
|
"invalid_request": ErrInvalidRequest,
|
||||||
|
"validation_error": ErrValidation,
|
||||||
|
"unauthorized": ErrUnauthorized,
|
||||||
|
"restricted_resource": ErrRestrictedResource,
|
||||||
|
"object_not_found": ErrObjectNotFound,
|
||||||
|
"conflict_error": ErrConflict,
|
||||||
|
"rate_limited": ErrRateLimited,
|
||||||
|
"internal_server_error": ErrInternalServer,
|
||||||
|
"service_unavailable": ErrServiceUnavailable,
|
||||||
|
}
|
||||||
|
|
||||||
type APIError struct {
|
type APIError struct {
|
||||||
Object string `json:"object"`
|
Object string `json:"object"`
|
||||||
Status int `json:"status"`
|
Status int `json:"status"`
|
||||||
@ -35,32 +49,12 @@ func (err *APIError) Error() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (err *APIError) Unwrap() error {
|
func (err *APIError) Unwrap() error {
|
||||||
switch err.Code {
|
mapped, ok := errMap[err.Code]
|
||||||
case "invalid_json":
|
if !ok {
|
||||||
return ErrInvalidJSON
|
return fmt.Errorf("notion: %v", err.Error())
|
||||||
case "invalid_request_url":
|
|
||||||
return ErrInvalidRequestURL
|
|
||||||
case "invalid_request":
|
|
||||||
return ErrInvalidRequest
|
|
||||||
case "validation_error":
|
|
||||||
return ErrValidation
|
|
||||||
case "unauthorized":
|
|
||||||
return ErrUnauthorized
|
|
||||||
case "restricted_resource":
|
|
||||||
return ErrRestrictedResource
|
|
||||||
case "object_not_found":
|
|
||||||
return ErrObjectNotFound
|
|
||||||
case "conflict_error":
|
|
||||||
return ErrConflict
|
|
||||||
case "rate_limited":
|
|
||||||
return ErrRateLimited
|
|
||||||
case "internal_server_error":
|
|
||||||
return ErrInternalServer
|
|
||||||
case "service_unavailable":
|
|
||||||
return ErrServiceUnavailable
|
|
||||||
default:
|
|
||||||
return fmt.Errorf("notion: unknown error (%v)", err.Code)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return mapped
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseErrorResponse(res *http.Response) error {
|
func parseErrorResponse(res *http.Response) error {
|
||||||
|
Reference in New Issue
Block a user