blob: 32d5b0147a2f001e6855472447fbc32c175d6f35 [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
khenaidood948f772021-08-11 17:49:24 -040022import (
23 "context"
24)
25
khenaidooc6c7bda2020-06-17 17:20:18 -040026const (
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
khenaidood948f772021-08-11 17:49:24 -040035 INVALID_TRANSFORM = 8
36 INVALID_PROTOCOL = 9
37 UNSUPPORTED_CLIENT_TYPE = 10
khenaidooc6c7bda2020-06-17 17:20:18 -040038)
39
khenaidood948f772021-08-11 17:49:24 -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
khenaidooc6c7bda2020-06-17 17:20:18 -040054// Application level Thrift exception
55type TApplicationException interface {
56 TException
57 TypeId() int32
khenaidood948f772021-08-11 17:49:24 -040058 Read(ctx context.Context, iprot TProtocol) error
59 Write(ctx context.Context, oprot TProtocol) error
khenaidooc6c7bda2020-06-17 17:20:18 -040060}
61
62type tApplicationException struct {
63 message string
64 type_ int32
65}
66
khenaidood948f772021-08-11 17:49:24 -040067var _ TApplicationException = (*tApplicationException)(nil)
68
69func (tApplicationException) TExceptionType() TExceptionType {
70 return TExceptionTypeApplication
71}
72
khenaidooc6c7bda2020-06-17 17:20:18 -040073func (e tApplicationException) Error() string {
khenaidood948f772021-08-11 17:49:24 -040074 if e.message != "" {
75 return e.message
76 }
77 return defaultApplicationExceptionMessage[e.type_]
khenaidooc6c7bda2020-06-17 17:20:18 -040078}
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
khenaidood948f772021-08-11 17:49:24 -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)
khenaidooc6c7bda2020-06-17 17:20:18 -040091 if err != nil {
khenaidood948f772021-08-11 17:49:24 -040092 return err
khenaidooc6c7bda2020-06-17 17:20:18 -040093 }
94
95 message := ""
96 type_ := int32(UNKNOWN_APPLICATION_EXCEPTION)
97
98 for {
khenaidood948f772021-08-11 17:49:24 -040099 _, ttype, id, err := iprot.ReadFieldBegin(ctx)
khenaidooc6c7bda2020-06-17 17:20:18 -0400100 if err != nil {
khenaidood948f772021-08-11 17:49:24 -0400101 return err
khenaidooc6c7bda2020-06-17 17:20:18 -0400102 }
103 if ttype == STOP {
104 break
105 }
106 switch id {
107 case 1:
108 if ttype == STRING {
khenaidood948f772021-08-11 17:49:24 -0400109 if message, err = iprot.ReadString(ctx); err != nil {
110 return err
khenaidooc6c7bda2020-06-17 17:20:18 -0400111 }
112 } else {
khenaidood948f772021-08-11 17:49:24 -0400113 if err = SkipDefaultDepth(ctx, iprot, ttype); err != nil {
114 return err
khenaidooc6c7bda2020-06-17 17:20:18 -0400115 }
116 }
117 case 2:
118 if ttype == I32 {
khenaidood948f772021-08-11 17:49:24 -0400119 if type_, err = iprot.ReadI32(ctx); err != nil {
120 return err
khenaidooc6c7bda2020-06-17 17:20:18 -0400121 }
122 } else {
khenaidood948f772021-08-11 17:49:24 -0400123 if err = SkipDefaultDepth(ctx, iprot, ttype); err != nil {
124 return err
khenaidooc6c7bda2020-06-17 17:20:18 -0400125 }
126 }
127 default:
khenaidood948f772021-08-11 17:49:24 -0400128 if err = SkipDefaultDepth(ctx, iprot, ttype); err != nil {
129 return err
khenaidooc6c7bda2020-06-17 17:20:18 -0400130 }
131 }
khenaidood948f772021-08-11 17:49:24 -0400132 if err = iprot.ReadFieldEnd(ctx); err != nil {
133 return err
khenaidooc6c7bda2020-06-17 17:20:18 -0400134 }
135 }
khenaidood948f772021-08-11 17:49:24 -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
khenaidooc6c7bda2020-06-17 17:20:18 -0400144}
145
khenaidood948f772021-08-11 17:49:24 -0400146func (p *tApplicationException) Write(ctx context.Context, oprot TProtocol) (err error) {
147 err = oprot.WriteStructBegin(ctx, "TApplicationException")
khenaidooc6c7bda2020-06-17 17:20:18 -0400148 if len(p.Error()) > 0 {
khenaidood948f772021-08-11 17:49:24 -0400149 err = oprot.WriteFieldBegin(ctx, "message", STRING, 1)
khenaidooc6c7bda2020-06-17 17:20:18 -0400150 if err != nil {
151 return
152 }
khenaidood948f772021-08-11 17:49:24 -0400153 err = oprot.WriteString(ctx, p.Error())
khenaidooc6c7bda2020-06-17 17:20:18 -0400154 if err != nil {
155 return
156 }
khenaidood948f772021-08-11 17:49:24 -0400157 err = oprot.WriteFieldEnd(ctx)
khenaidooc6c7bda2020-06-17 17:20:18 -0400158 if err != nil {
159 return
160 }
161 }
khenaidood948f772021-08-11 17:49:24 -0400162 err = oprot.WriteFieldBegin(ctx, "type", I32, 2)
khenaidooc6c7bda2020-06-17 17:20:18 -0400163 if err != nil {
164 return
165 }
khenaidood948f772021-08-11 17:49:24 -0400166 err = oprot.WriteI32(ctx, p.type_)
khenaidooc6c7bda2020-06-17 17:20:18 -0400167 if err != nil {
168 return
169 }
khenaidood948f772021-08-11 17:49:24 -0400170 err = oprot.WriteFieldEnd(ctx)
khenaidooc6c7bda2020-06-17 17:20:18 -0400171 if err != nil {
172 return
173 }
khenaidood948f772021-08-11 17:49:24 -0400174 err = oprot.WriteFieldStop(ctx)
khenaidooc6c7bda2020-06-17 17:20:18 -0400175 if err != nil {
176 return
177 }
khenaidood948f772021-08-11 17:49:24 -0400178 err = oprot.WriteStructEnd(ctx)
khenaidooc6c7bda2020-06-17 17:20:18 -0400179 return
180}