165 lines
3.9 KiB
Go
165 lines
3.9 KiB
Go
|
/*
|
||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||
|
* or more contributor license agreements. See the NOTICE file
|
||
|
* distributed with this work for additional information
|
||
|
* regarding copyright ownership. The ASF licenses this file
|
||
|
* to you under the Apache License, Version 2.0 (the
|
||
|
* "License"); you may not use this file except in compliance
|
||
|
* with the License. You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing,
|
||
|
* software distributed under the License is distributed on an
|
||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||
|
* KIND, either express or implied. See the License for the
|
||
|
* specific language governing permissions and limitations
|
||
|
* under the License.
|
||
|
*/
|
||
|
|
||
|
package thrift
|
||
|
|
||
|
const (
|
||
|
UNKNOWN_APPLICATION_EXCEPTION = 0
|
||
|
UNKNOWN_METHOD = 1
|
||
|
INVALID_MESSAGE_TYPE_EXCEPTION = 2
|
||
|
WRONG_METHOD_NAME = 3
|
||
|
BAD_SEQUENCE_ID = 4
|
||
|
MISSING_RESULT = 5
|
||
|
INTERNAL_ERROR = 6
|
||
|
PROTOCOL_ERROR = 7
|
||
|
)
|
||
|
|
||
|
var defaultApplicationExceptionMessage = map[int32]string{
|
||
|
UNKNOWN_APPLICATION_EXCEPTION: "unknown application exception",
|
||
|
UNKNOWN_METHOD: "unknown method",
|
||
|
INVALID_MESSAGE_TYPE_EXCEPTION: "invalid message type",
|
||
|
WRONG_METHOD_NAME: "wrong method name",
|
||
|
BAD_SEQUENCE_ID: "bad sequence ID",
|
||
|
MISSING_RESULT: "missing result",
|
||
|
INTERNAL_ERROR: "unknown internal error",
|
||
|
PROTOCOL_ERROR: "unknown protocol error",
|
||
|
}
|
||
|
|
||
|
// Application level Thrift exception
|
||
|
type TApplicationException interface {
|
||
|
TException
|
||
|
TypeId() int32
|
||
|
Read(iprot TProtocol) error
|
||
|
Write(oprot TProtocol) error
|
||
|
}
|
||
|
|
||
|
type tApplicationException struct {
|
||
|
message string
|
||
|
type_ int32
|
||
|
}
|
||
|
|
||
|
func (e tApplicationException) Error() string {
|
||
|
if e.message != "" {
|
||
|
return e.message
|
||
|
}
|
||
|
return defaultApplicationExceptionMessage[e.type_]
|
||
|
}
|
||
|
|
||
|
func NewTApplicationException(type_ int32, message string) TApplicationException {
|
||
|
return &tApplicationException{message, type_}
|
||
|
}
|
||
|
|
||
|
func (p *tApplicationException) TypeId() int32 {
|
||
|
return p.type_
|
||
|
}
|
||
|
|
||
|
func (p *tApplicationException) Read(iprot TProtocol) error {
|
||
|
// TODO: this should really be generated by the compiler
|
||
|
_, err := iprot.ReadStructBegin()
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
message := ""
|
||
|
type_ := int32(UNKNOWN_APPLICATION_EXCEPTION)
|
||
|
|
||
|
for {
|
||
|
_, ttype, id, err := iprot.ReadFieldBegin()
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
if ttype == STOP {
|
||
|
break
|
||
|
}
|
||
|
switch id {
|
||
|
case 1:
|
||
|
if ttype == STRING {
|
||
|
if message, err = iprot.ReadString(); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
} else {
|
||
|
if err = SkipDefaultDepth(iprot, ttype); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
}
|
||
|
case 2:
|
||
|
if ttype == I32 {
|
||
|
if type_, err = iprot.ReadI32(); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
} else {
|
||
|
if err = SkipDefaultDepth(iprot, ttype); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
}
|
||
|
default:
|
||
|
if err = SkipDefaultDepth(iprot, ttype); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
}
|
||
|
if err = iprot.ReadFieldEnd(); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
}
|
||
|
if err := iprot.ReadStructEnd(); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
p.message = message
|
||
|
p.type_ = type_
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (p *tApplicationException) Write(oprot TProtocol) (err error) {
|
||
|
err = oprot.WriteStructBegin("TApplicationException")
|
||
|
if len(p.Error()) > 0 {
|
||
|
err = oprot.WriteFieldBegin("message", STRING, 1)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
err = oprot.WriteString(p.Error())
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
err = oprot.WriteFieldEnd()
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
err = oprot.WriteFieldBegin("type", I32, 2)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
err = oprot.WriteI32(p.type_)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
err = oprot.WriteFieldEnd()
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
err = oprot.WriteFieldStop()
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
err = oprot.WriteStructEnd()
|
||
|
return
|
||
|
}
|