toAPIErrorCode - Converts embedded errors. Convenience function written to handle all cases where we have known types of errors returned by underlying layers.
(ctx context.Context, err error)
| 2003 | // function written to handle all cases where we have known types of |
| 2004 | // errors returned by underlying layers. |
| 2005 | func toAPIErrorCode(ctx context.Context, err error) (apiErr APIErrorCode) { |
| 2006 | if err == nil { |
| 2007 | return ErrNone |
| 2008 | } |
| 2009 | |
| 2010 | // Only return ErrClientDisconnected if the provided context is actually canceled. |
| 2011 | // This way downstream context.Canceled will still report ErrOperationTimedOut |
| 2012 | if contextCanceled(ctx) && errors.Is(ctx.Err(), context.Canceled) { |
| 2013 | return ErrClientDisconnected |
| 2014 | } |
| 2015 | |
| 2016 | switch err { |
| 2017 | case errInvalidArgument: |
| 2018 | apiErr = ErrAdminInvalidArgument |
| 2019 | case errNoSuchPolicy: |
| 2020 | apiErr = ErrAdminNoSuchPolicy |
| 2021 | case errNoSuchUser: |
| 2022 | apiErr = ErrAdminNoSuchUser |
| 2023 | case errNoSuchServiceAccount: |
| 2024 | apiErr = ErrAdminServiceAccountNotFound |
| 2025 | case errNoSuchGroup: |
| 2026 | apiErr = ErrAdminNoSuchGroup |
| 2027 | case errGroupNotEmpty: |
| 2028 | apiErr = ErrAdminGroupNotEmpty |
| 2029 | case errNoSuchJob: |
| 2030 | apiErr = ErrAdminNoSuchJob |
| 2031 | case errNoPolicyToAttachOrDetach: |
| 2032 | apiErr = ErrAdminPolicyChangeAlreadyApplied |
| 2033 | case errSignatureMismatch: |
| 2034 | apiErr = ErrSignatureDoesNotMatch |
| 2035 | case errInvalidRange: |
| 2036 | apiErr = ErrInvalidRange |
| 2037 | case errDataTooLarge: |
| 2038 | apiErr = ErrEntityTooLarge |
| 2039 | case errDataTooSmall: |
| 2040 | apiErr = ErrEntityTooSmall |
| 2041 | case errAuthentication: |
| 2042 | apiErr = ErrAccessDenied |
| 2043 | case auth.ErrInvalidAccessKeyLength: |
| 2044 | apiErr = ErrAdminInvalidAccessKey |
| 2045 | case auth.ErrInvalidSecretKeyLength: |
| 2046 | apiErr = ErrAdminInvalidSecretKey |
| 2047 | case errInvalidStorageClass: |
| 2048 | apiErr = ErrInvalidStorageClass |
| 2049 | case errErasureReadQuorum: |
| 2050 | apiErr = ErrSlowDown |
| 2051 | case errErasureWriteQuorum: |
| 2052 | apiErr = ErrSlowDown |
| 2053 | // SSE errors |
| 2054 | case errInvalidEncryptionParameters: |
| 2055 | apiErr = ErrInvalidEncryptionParameters |
| 2056 | case errInvalidEncryptionParametersSSEC: |
| 2057 | apiErr = ErrInvalidEncryptionParametersSSEC |
| 2058 | case crypto.ErrInvalidEncryptionMethod: |
| 2059 | apiErr = ErrInvalidEncryptionMethod |
| 2060 | case crypto.ErrInvalidEncryptionKeyID: |
| 2061 | apiErr = ErrInvalidEncryptionKeyID |
| 2062 | case crypto.ErrInvalidCustomerAlgorithm: |