blob: 9dcf4bfd94cac9a6695fbcf4024069ac7c41838d [file] [log] [blame]
khenaidooc6c7bda2020-06-17 17:20:18 -04001/*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19
20package thrift
21
22import (
23 "encoding/base64"
khenaidood948f772021-08-11 17:49:24 -040024 "errors"
khenaidooc6c7bda2020-06-17 17:20:18 -040025)
26
27// Thrift Protocol exception
28type TProtocolException interface {
29 TException
30 TypeId() int
31}
32
33const (
34 UNKNOWN_PROTOCOL_EXCEPTION = 0
35 INVALID_DATA = 1
36 NEGATIVE_SIZE = 2
37 SIZE_LIMIT = 3
38 BAD_VERSION = 4
39 NOT_IMPLEMENTED = 5
40 DEPTH_LIMIT = 6
41)
42
43type tProtocolException struct {
khenaidood948f772021-08-11 17:49:24 -040044 typeId int
45 err error
46 msg string
47}
48
49var _ TProtocolException = (*tProtocolException)(nil)
50
51func (tProtocolException) TExceptionType() TExceptionType {
52 return TExceptionTypeProtocol
khenaidooc6c7bda2020-06-17 17:20:18 -040053}
54
55func (p *tProtocolException) TypeId() int {
56 return p.typeId
57}
58
59func (p *tProtocolException) String() string {
khenaidood948f772021-08-11 17:49:24 -040060 return p.msg
khenaidooc6c7bda2020-06-17 17:20:18 -040061}
62
63func (p *tProtocolException) Error() string {
khenaidood948f772021-08-11 17:49:24 -040064 return p.msg
65}
66
67func (p *tProtocolException) Unwrap() error {
68 return p.err
khenaidooc6c7bda2020-06-17 17:20:18 -040069}
70
71func NewTProtocolException(err error) TProtocolException {
72 if err == nil {
73 return nil
74 }
khenaidood948f772021-08-11 17:49:24 -040075
76 if e, ok := err.(TProtocolException); ok {
khenaidooc6c7bda2020-06-17 17:20:18 -040077 return e
78 }
khenaidood948f772021-08-11 17:49:24 -040079
80 if errors.As(err, new(base64.CorruptInputError)) {
81 return NewTProtocolExceptionWithType(INVALID_DATA, err)
khenaidooc6c7bda2020-06-17 17:20:18 -040082 }
khenaidood948f772021-08-11 17:49:24 -040083
84 return NewTProtocolExceptionWithType(UNKNOWN_PROTOCOL_EXCEPTION, err)
khenaidooc6c7bda2020-06-17 17:20:18 -040085}
86
87func NewTProtocolExceptionWithType(errType int, err error) TProtocolException {
88 if err == nil {
89 return nil
90 }
khenaidood948f772021-08-11 17:49:24 -040091 return &tProtocolException{
92 typeId: errType,
93 err: err,
94 msg: err.Error(),
95 }
khenaidooc6c7bda2020-06-17 17:20:18 -040096}
97
khenaidood948f772021-08-11 17:49:24 -040098func prependTProtocolException(prepend string, err TProtocolException) TProtocolException {
99 return &tProtocolException{
100 typeId: err.TypeId(),
101 err: err,
102 msg: prepend + err.Error(),
103 }
104}