blob: 32d5b0147a2f001e6855472447fbc32c175d6f35 [file] [log] [blame]
mpagenkoaf801632020-07-03 10:00:42 +00001/*
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
khenaidoo7d3c5582021-08-11 18:09:44 -040022import (
23 "context"
24)
25
mpagenkoaf801632020-07-03 10:00:42 +000026const (
27 UNKNOWN_APPLICATION_EXCEPTION = 0
28 UNKNOWN_METHOD = 1
29 INVALID_MESSAGE_TYPE_EXCEPTION = 2
30 WRONG_METHOD_NAME = 3
31 BAD_SEQUENCE_ID = 4
32 MISSING_RESULT = 5
33 INTERNAL_ERROR = 6
34 PROTOCOL_ERROR = 7
khenaidoo7d3c5582021-08-11 18:09:44 -040035 INVALID_TRANSFORM = 8
36 INVALID_PROTOCOL = 9
37 UNSUPPORTED_CLIENT_TYPE = 10
mpagenkoaf801632020-07-03 10:00:42 +000038)
39
khenaidoo7d3c5582021-08-11 18:09:44 -040040var defaultApplicationExceptionMessage = map[int32]string{
41 UNKNOWN_APPLICATION_EXCEPTION: "unknown application exception",
42 UNKNOWN_METHOD: "unknown method",
43 INVALID_MESSAGE_TYPE_EXCEPTION: "invalid message type",
44 WRONG_METHOD_NAME: "wrong method name",
45 BAD_SEQUENCE_ID: "bad sequence ID",
46 MISSING_RESULT: "missing result",
47 INTERNAL_ERROR: "unknown internal error",
48 PROTOCOL_ERROR: "unknown protocol error",
49 INVALID_TRANSFORM: "Invalid transform",
50 INVALID_PROTOCOL: "Invalid protocol",
51 UNSUPPORTED_CLIENT_TYPE: "Unsupported client type",
52}
53
mpagenkoaf801632020-07-03 10:00:42 +000054// Application level Thrift exception
55type TApplicationException interface {
56 TException
57 TypeId() int32
khenaidoo7d3c5582021-08-11 18:09:44 -040058 Read(ctx context.Context, iprot TProtocol) error
59 Write(ctx context.Context, oprot TProtocol) error
mpagenkoaf801632020-07-03 10:00:42 +000060}
61
62type tApplicationException struct {
63 message string
64 type_ int32
65}
66
khenaidoo7d3c5582021-08-11 18:09:44 -040067var _ TApplicationException = (*tApplicationException)(nil)
68
69func (tApplicationException) TExceptionType() TExceptionType {
70 return TExceptionTypeApplication
71}
72
mpagenkoaf801632020-07-03 10:00:42 +000073func (e tApplicationException) Error() string {
khenaidoo7d3c5582021-08-11 18:09:44 -040074 if e.message != "" {
75 return e.message
76 }
77 return defaultApplicationExceptionMessage[e.type_]
mpagenkoaf801632020-07-03 10:00:42 +000078}
79
80func NewTApplicationException(type_ int32, message string) TApplicationException {
81 return &tApplicationException{message, type_}
82}
83
84func (p *tApplicationException) TypeId() int32 {
85 return p.type_
86}
87
khenaidoo7d3c5582021-08-11 18:09:44 -040088func (p *tApplicationException) Read(ctx context.Context, iprot TProtocol) error {
89 // TODO: this should really be generated by the compiler
90 _, err := iprot.ReadStructBegin(ctx)
mpagenkoaf801632020-07-03 10:00:42 +000091 if err != nil {
khenaidoo7d3c5582021-08-11 18:09:44 -040092 return err
mpagenkoaf801632020-07-03 10:00:42 +000093 }
94
95 message := ""
96 type_ := int32(UNKNOWN_APPLICATION_EXCEPTION)
97
98 for {
khenaidoo7d3c5582021-08-11 18:09:44 -040099 _, ttype, id, err := iprot.ReadFieldBegin(ctx)
mpagenkoaf801632020-07-03 10:00:42 +0000100 if err != nil {
khenaidoo7d3c5582021-08-11 18:09:44 -0400101 return err
mpagenkoaf801632020-07-03 10:00:42 +0000102 }
103 if ttype == STOP {
104 break
105 }
106 switch id {
107 case 1:
108 if ttype == STRING {
khenaidoo7d3c5582021-08-11 18:09:44 -0400109 if message, err = iprot.ReadString(ctx); err != nil {
110 return err
mpagenkoaf801632020-07-03 10:00:42 +0000111 }
112 } else {
khenaidoo7d3c5582021-08-11 18:09:44 -0400113 if err = SkipDefaultDepth(ctx, iprot, ttype); err != nil {
114 return err
mpagenkoaf801632020-07-03 10:00:42 +0000115 }
116 }
117 case 2:
118 if ttype == I32 {
khenaidoo7d3c5582021-08-11 18:09:44 -0400119 if type_, err = iprot.ReadI32(ctx); err != nil {
120 return err
mpagenkoaf801632020-07-03 10:00:42 +0000121 }
122 } else {
khenaidoo7d3c5582021-08-11 18:09:44 -0400123 if err = SkipDefaultDepth(ctx, iprot, ttype); err != nil {
124 return err
mpagenkoaf801632020-07-03 10:00:42 +0000125 }
126 }
127 default:
khenaidoo7d3c5582021-08-11 18:09:44 -0400128 if err = SkipDefaultDepth(ctx, iprot, ttype); err != nil {
129 return err
mpagenkoaf801632020-07-03 10:00:42 +0000130 }
131 }
khenaidoo7d3c5582021-08-11 18:09:44 -0400132 if err = iprot.ReadFieldEnd(ctx); err != nil {
133 return err
mpagenkoaf801632020-07-03 10:00:42 +0000134 }
135 }
khenaidoo7d3c5582021-08-11 18:09:44 -0400136 if err := iprot.ReadStructEnd(ctx); err != nil {
137 return err
138 }
139
140 p.message = message
141 p.type_ = type_
142
143 return nil
mpagenkoaf801632020-07-03 10:00:42 +0000144}
145
khenaidoo7d3c5582021-08-11 18:09:44 -0400146func (p *tApplicationException) Write(ctx context.Context, oprot TProtocol) (err error) {
147 err = oprot.WriteStructBegin(ctx, "TApplicationException")
mpagenkoaf801632020-07-03 10:00:42 +0000148 if len(p.Error()) > 0 {
khenaidoo7d3c5582021-08-11 18:09:44 -0400149 err = oprot.WriteFieldBegin(ctx, "message", STRING, 1)
mpagenkoaf801632020-07-03 10:00:42 +0000150 if err != nil {
151 return
152 }
khenaidoo7d3c5582021-08-11 18:09:44 -0400153 err = oprot.WriteString(ctx, p.Error())
mpagenkoaf801632020-07-03 10:00:42 +0000154 if err != nil {
155 return
156 }
khenaidoo7d3c5582021-08-11 18:09:44 -0400157 err = oprot.WriteFieldEnd(ctx)
mpagenkoaf801632020-07-03 10:00:42 +0000158 if err != nil {
159 return
160 }
161 }
khenaidoo7d3c5582021-08-11 18:09:44 -0400162 err = oprot.WriteFieldBegin(ctx, "type", I32, 2)
mpagenkoaf801632020-07-03 10:00:42 +0000163 if err != nil {
164 return
165 }
khenaidoo7d3c5582021-08-11 18:09:44 -0400166 err = oprot.WriteI32(ctx, p.type_)
mpagenkoaf801632020-07-03 10:00:42 +0000167 if err != nil {
168 return
169 }
khenaidoo7d3c5582021-08-11 18:09:44 -0400170 err = oprot.WriteFieldEnd(ctx)
mpagenkoaf801632020-07-03 10:00:42 +0000171 if err != nil {
172 return
173 }
khenaidoo7d3c5582021-08-11 18:09:44 -0400174 err = oprot.WriteFieldStop(ctx)
mpagenkoaf801632020-07-03 10:00:42 +0000175 if err != nil {
176 return
177 }
khenaidoo7d3c5582021-08-11 18:09:44 -0400178 err = oprot.WriteStructEnd(ctx)
mpagenkoaf801632020-07-03 10:00:42 +0000179 return
180}