mirror of
https://github.com/opencloud-eu/opencloud.git
synced 2026-01-17 18:38:18 -05:00
* move jmap.request() to jmap.Client.request() and pass the Session
and a Logger to introduce checking the number of methodCalls within a
request not exceeding the limit of the Session, as well as error
handling and logging there instead of in each caller
* a few bugfixes:
- add a few missing Send() calls in logs
- correct the response tag matching for
GetMailboxChangesForMultipleAccounts
- fix typo in Identity.ReplyTo json serialization rune
- fix response tag in pkg/jmap/testdata/mailboxes1.json after
changing them to be prefixed by the accountId
73 lines
1.5 KiB
Go
73 lines
1.5 KiB
Go
package jmap
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
const (
|
|
JmapErrorAuthenticationFailed = iota
|
|
JmapErrorInvalidHttpRequest
|
|
JmapErrorServerResponse
|
|
JmapErrorReadingResponseBody
|
|
JmapErrorDecodingResponseBody
|
|
JmapErrorEncodingRequestBody
|
|
JmapErrorCreatingRequest
|
|
JmapErrorSendingRequest
|
|
JmapErrorInvalidSessionResponse
|
|
JmapErrorInvalidJmapRequestPayload
|
|
JmapErrorInvalidJmapResponsePayload
|
|
JmapErrorMethodLevel
|
|
JmapErrorSetError
|
|
JmapErrorTooManyMethodCalls
|
|
)
|
|
|
|
var (
|
|
errTooManyMethodCalls = errors.New("the amount of methodCalls in the request body would exceed the maximum that is configured in the session")
|
|
)
|
|
|
|
type Error interface {
|
|
Code() int
|
|
error
|
|
}
|
|
|
|
type SimpleError struct {
|
|
code int
|
|
err error
|
|
}
|
|
|
|
var _ Error = &SimpleError{}
|
|
|
|
func (e SimpleError) Code() int {
|
|
return e.code
|
|
}
|
|
func (e SimpleError) Unwrap() error {
|
|
return e.err
|
|
}
|
|
func (e SimpleError) Error() string {
|
|
if e.err != nil {
|
|
return e.err.Error()
|
|
} else {
|
|
return ""
|
|
}
|
|
}
|
|
|
|
func simpleError(err error, code int) Error {
|
|
if err != nil {
|
|
return SimpleError{code: code, err: err}
|
|
} else {
|
|
return nil
|
|
}
|
|
}
|
|
|
|
func setErrorError(err SetError, objectType ObjectType) Error {
|
|
var e error
|
|
if len(err.Properties) > 0 {
|
|
e = fmt.Errorf("failed to modify %s due to %s error in properties [%s]: %s", objectType, err.Type, strings.Join(err.Properties, ", "), err.Description)
|
|
} else {
|
|
e = fmt.Errorf("failed to modify %s due to %s error: %s", objectType, err.Type, err.Description)
|
|
}
|
|
return SimpleError{code: JmapErrorSetError, err: e}
|
|
}
|