blob: 32d5b0147a2f001e6855472447fbc32c175d6f35 [file] [log] [blame]
Girish Gowdra5d7d6442020-09-08 17:03:11 -07001/*
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
Girish Gowdra390f12f2021-07-01 15:53:49 -070022import (
23 "context"
24)
25
Girish Gowdra5d7d6442020-09-08 17:03:11 -070026const (
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
Girish Gowdra390f12f2021-07-01 15:53:49 -070035 INVALID_TRANSFORM = 8
36 INVALID_PROTOCOL = 9
37 UNSUPPORTED_CLIENT_TYPE = 10
Girish Gowdra5d7d6442020-09-08 17:03:11 -070038)
39
Girish Gowdra390f12f2021-07-01 15:53:49 -070040var 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
Girish Gowdra5d7d6442020-09-08 17:03:11 -070054// Application level Thrift exception
55type TApplicationException interface {
56 TException
57 TypeId() int32
Girish Gowdra390f12f2021-07-01 15:53:49 -070058 Read(ctx context.Context, iprot TProtocol) error
59 Write(ctx context.Context, oprot TProtocol) error
Girish Gowdra5d7d6442020-09-08 17:03:11 -070060}
61
62type tApplicationException struct {
63 message string
64 type_ int32
65}
66
Girish Gowdra390f12f2021-07-01 15:53:49 -070067var _ TApplicationException = (*tApplicationException)(nil)
68
69func (tApplicationException) TExceptionType() TExceptionType {
70 return TExceptionTypeApplication
71}
72
Girish Gowdra5d7d6442020-09-08 17:03:11 -070073func (e tApplicationException) Error() string {
Girish Gowdra390f12f2021-07-01 15:53:49 -070074 if e.message != "" {
75 return e.message
76 }
77 return defaultApplicationExceptionMessage[e.type_]
Girish Gowdra5d7d6442020-09-08 17:03:11 -070078}
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
Girish Gowdra390f12f2021-07-01 15:53:49 -070088func (p *tApplicationException) Read(ctx context.Context, iprot TProtocol) error {
89 // TODO: this should really be generated by the compiler
90 _, err := iprot.ReadStructBegin(ctx)
Girish Gowdra5d7d6442020-09-08 17:03:11 -070091 if err != nil {
Girish Gowdra390f12f2021-07-01 15:53:49 -070092 return err
Girish Gowdra5d7d6442020-09-08 17:03:11 -070093 }
94
95 message := ""
96 type_ := int32(UNKNOWN_APPLICATION_EXCEPTION)
97
98 for {
Girish Gowdra390f12f2021-07-01 15:53:49 -070099 _, ttype, id, err := iprot.ReadFieldBegin(ctx)
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700100 if err != nil {
Girish Gowdra390f12f2021-07-01 15:53:49 -0700101 return err
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700102 }
103 if ttype == STOP {
104 break
105 }
106 switch id {
107 case 1:
108 if ttype == STRING {
Girish Gowdra390f12f2021-07-01 15:53:49 -0700109 if message, err = iprot.ReadString(ctx); err != nil {
110 return err
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700111 }
112 } else {
Girish Gowdra390f12f2021-07-01 15:53:49 -0700113 if err = SkipDefaultDepth(ctx, iprot, ttype); err != nil {
114 return err
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700115 }
116 }
117 case 2:
118 if ttype == I32 {
Girish Gowdra390f12f2021-07-01 15:53:49 -0700119 if type_, err = iprot.ReadI32(ctx); err != nil {
120 return err
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700121 }
122 } else {
Girish Gowdra390f12f2021-07-01 15:53:49 -0700123 if err = SkipDefaultDepth(ctx, iprot, ttype); err != nil {
124 return err
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700125 }
126 }
127 default:
Girish Gowdra390f12f2021-07-01 15:53:49 -0700128 if err = SkipDefaultDepth(ctx, iprot, ttype); err != nil {
129 return err
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700130 }
131 }
Girish Gowdra390f12f2021-07-01 15:53:49 -0700132 if err = iprot.ReadFieldEnd(ctx); err != nil {
133 return err
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700134 }
135 }
Girish Gowdra390f12f2021-07-01 15:53:49 -0700136 if err := iprot.ReadStructEnd(ctx); err != nil {
137 return err
138 }
139
140 p.message = message
141 p.type_ = type_
142
143 return nil
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700144}
145
Girish Gowdra390f12f2021-07-01 15:53:49 -0700146func (p *tApplicationException) Write(ctx context.Context, oprot TProtocol) (err error) {
147 err = oprot.WriteStructBegin(ctx, "TApplicationException")
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700148 if len(p.Error()) > 0 {
Girish Gowdra390f12f2021-07-01 15:53:49 -0700149 err = oprot.WriteFieldBegin(ctx, "message", STRING, 1)
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700150 if err != nil {
151 return
152 }
Girish Gowdra390f12f2021-07-01 15:53:49 -0700153 err = oprot.WriteString(ctx, p.Error())
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700154 if err != nil {
155 return
156 }
Girish Gowdra390f12f2021-07-01 15:53:49 -0700157 err = oprot.WriteFieldEnd(ctx)
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700158 if err != nil {
159 return
160 }
161 }
Girish Gowdra390f12f2021-07-01 15:53:49 -0700162 err = oprot.WriteFieldBegin(ctx, "type", I32, 2)
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700163 if err != nil {
164 return
165 }
Girish Gowdra390f12f2021-07-01 15:53:49 -0700166 err = oprot.WriteI32(ctx, p.type_)
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700167 if err != nil {
168 return
169 }
Girish Gowdra390f12f2021-07-01 15:53:49 -0700170 err = oprot.WriteFieldEnd(ctx)
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700171 if err != nil {
172 return
173 }
Girish Gowdra390f12f2021-07-01 15:53:49 -0700174 err = oprot.WriteFieldStop(ctx)
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700175 if err != nil {
176 return
177 }
Girish Gowdra390f12f2021-07-01 15:53:49 -0700178 err = oprot.WriteStructEnd(ctx)
Girish Gowdra5d7d6442020-09-08 17:03:11 -0700179 return
180}