swarm: integrate OpenTracing; propagate ctx to internal APIs (#17169)
* swarm: propagate ctx, enable opentracing * swarm/tracing: log error when tracing is misconfigured
This commit is contained in:
		
				
					committed by
					
						 Balint Gabor
						Balint Gabor
					
				
			
			
				
	
			
			
			
						parent
						
							f7d3678c28
						
					
				
				
					commit
					7c9314f231
				
			
							
								
								
									
										7
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| # Apache Thrift | ||||
|  | ||||
| This is a partial copy of Apache Thrift v0.10 (https://github.com/apache/thrift/commit/b2a4d4ae21c789b689dd162deb819665567f481c). | ||||
|  | ||||
| It is vendored code to avoid compatibility issues introduced in Thrift  v0.11. | ||||
|  | ||||
| See https://github.com/jaegertracing/jaeger-client-go/pull/303. | ||||
							
								
								
									
										142
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/application_exception.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/application_exception.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,142 @@ | ||||
| /* | ||||
|  * 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 | ||||
| ) | ||||
|  | ||||
| // Application level Thrift exception | ||||
| type TApplicationException interface { | ||||
| 	TException | ||||
| 	TypeId() int32 | ||||
| 	Read(iprot TProtocol) (TApplicationException, error) | ||||
| 	Write(oprot TProtocol) error | ||||
| } | ||||
|  | ||||
| type tApplicationException struct { | ||||
| 	message string | ||||
| 	type_   int32 | ||||
| } | ||||
|  | ||||
| func (e tApplicationException) Error() string { | ||||
| 	return e.message | ||||
| } | ||||
|  | ||||
| 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) (TApplicationException, error) { | ||||
| 	_, err := iprot.ReadStructBegin() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| 	message := "" | ||||
| 	type_ := int32(UNKNOWN_APPLICATION_EXCEPTION) | ||||
|  | ||||
| 	for { | ||||
| 		_, ttype, id, err := iprot.ReadFieldBegin() | ||||
| 		if err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 		if ttype == STOP { | ||||
| 			break | ||||
| 		} | ||||
| 		switch id { | ||||
| 		case 1: | ||||
| 			if ttype == STRING { | ||||
| 				if message, err = iprot.ReadString(); err != nil { | ||||
| 					return nil, err | ||||
| 				} | ||||
| 			} else { | ||||
| 				if err = SkipDefaultDepth(iprot, ttype); err != nil { | ||||
| 					return nil, err | ||||
| 				} | ||||
| 			} | ||||
| 		case 2: | ||||
| 			if ttype == I32 { | ||||
| 				if type_, err = iprot.ReadI32(); err != nil { | ||||
| 					return nil, err | ||||
| 				} | ||||
| 			} else { | ||||
| 				if err = SkipDefaultDepth(iprot, ttype); err != nil { | ||||
| 					return nil, err | ||||
| 				} | ||||
| 			} | ||||
| 		default: | ||||
| 			if err = SkipDefaultDepth(iprot, ttype); err != nil { | ||||
| 				return nil, err | ||||
| 			} | ||||
| 		} | ||||
| 		if err = iprot.ReadFieldEnd(); err != nil { | ||||
| 			return nil, err | ||||
| 		} | ||||
| 	} | ||||
| 	return NewTApplicationException(type_, message), iprot.ReadStructEnd() | ||||
| } | ||||
|  | ||||
| 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 | ||||
| } | ||||
							
								
								
									
										514
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/binary_protocol.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										514
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/binary_protocol.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,514 @@ | ||||
| /* | ||||
|  * 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 | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/binary" | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"math" | ||||
| ) | ||||
|  | ||||
| type TBinaryProtocol struct { | ||||
| 	trans         TRichTransport | ||||
| 	origTransport TTransport | ||||
| 	reader        io.Reader | ||||
| 	writer        io.Writer | ||||
| 	strictRead    bool | ||||
| 	strictWrite   bool | ||||
| 	buffer        [64]byte | ||||
| } | ||||
|  | ||||
| type TBinaryProtocolFactory struct { | ||||
| 	strictRead  bool | ||||
| 	strictWrite bool | ||||
| } | ||||
|  | ||||
| func NewTBinaryProtocolTransport(t TTransport) *TBinaryProtocol { | ||||
| 	return NewTBinaryProtocol(t, false, true) | ||||
| } | ||||
|  | ||||
| func NewTBinaryProtocol(t TTransport, strictRead, strictWrite bool) *TBinaryProtocol { | ||||
| 	p := &TBinaryProtocol{origTransport: t, strictRead: strictRead, strictWrite: strictWrite} | ||||
| 	if et, ok := t.(TRichTransport); ok { | ||||
| 		p.trans = et | ||||
| 	} else { | ||||
| 		p.trans = NewTRichTransport(t) | ||||
| 	} | ||||
| 	p.reader = p.trans | ||||
| 	p.writer = p.trans | ||||
| 	return p | ||||
| } | ||||
|  | ||||
| func NewTBinaryProtocolFactoryDefault() *TBinaryProtocolFactory { | ||||
| 	return NewTBinaryProtocolFactory(false, true) | ||||
| } | ||||
|  | ||||
| func NewTBinaryProtocolFactory(strictRead, strictWrite bool) *TBinaryProtocolFactory { | ||||
| 	return &TBinaryProtocolFactory{strictRead: strictRead, strictWrite: strictWrite} | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocolFactory) GetProtocol(t TTransport) TProtocol { | ||||
| 	return NewTBinaryProtocol(t, p.strictRead, p.strictWrite) | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Writing Methods | ||||
|  */ | ||||
|  | ||||
| func (p *TBinaryProtocol) WriteMessageBegin(name string, typeId TMessageType, seqId int32) error { | ||||
| 	if p.strictWrite { | ||||
| 		version := uint32(VERSION_1) | uint32(typeId) | ||||
| 		e := p.WriteI32(int32(version)) | ||||
| 		if e != nil { | ||||
| 			return e | ||||
| 		} | ||||
| 		e = p.WriteString(name) | ||||
| 		if e != nil { | ||||
| 			return e | ||||
| 		} | ||||
| 		e = p.WriteI32(seqId) | ||||
| 		return e | ||||
| 	} else { | ||||
| 		e := p.WriteString(name) | ||||
| 		if e != nil { | ||||
| 			return e | ||||
| 		} | ||||
| 		e = p.WriteByte(int8(typeId)) | ||||
| 		if e != nil { | ||||
| 			return e | ||||
| 		} | ||||
| 		e = p.WriteI32(seqId) | ||||
| 		return e | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) WriteMessageEnd() error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) WriteStructBegin(name string) error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) WriteStructEnd() error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) WriteFieldBegin(name string, typeId TType, id int16) error { | ||||
| 	e := p.WriteByte(int8(typeId)) | ||||
| 	if e != nil { | ||||
| 		return e | ||||
| 	} | ||||
| 	e = p.WriteI16(id) | ||||
| 	return e | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) WriteFieldEnd() error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) WriteFieldStop() error { | ||||
| 	e := p.WriteByte(STOP) | ||||
| 	return e | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) WriteMapBegin(keyType TType, valueType TType, size int) error { | ||||
| 	e := p.WriteByte(int8(keyType)) | ||||
| 	if e != nil { | ||||
| 		return e | ||||
| 	} | ||||
| 	e = p.WriteByte(int8(valueType)) | ||||
| 	if e != nil { | ||||
| 		return e | ||||
| 	} | ||||
| 	e = p.WriteI32(int32(size)) | ||||
| 	return e | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) WriteMapEnd() error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) WriteListBegin(elemType TType, size int) error { | ||||
| 	e := p.WriteByte(int8(elemType)) | ||||
| 	if e != nil { | ||||
| 		return e | ||||
| 	} | ||||
| 	e = p.WriteI32(int32(size)) | ||||
| 	return e | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) WriteListEnd() error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) WriteSetBegin(elemType TType, size int) error { | ||||
| 	e := p.WriteByte(int8(elemType)) | ||||
| 	if e != nil { | ||||
| 		return e | ||||
| 	} | ||||
| 	e = p.WriteI32(int32(size)) | ||||
| 	return e | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) WriteSetEnd() error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) WriteBool(value bool) error { | ||||
| 	if value { | ||||
| 		return p.WriteByte(1) | ||||
| 	} | ||||
| 	return p.WriteByte(0) | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) WriteByte(value int8) error { | ||||
| 	e := p.trans.WriteByte(byte(value)) | ||||
| 	return NewTProtocolException(e) | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) WriteI16(value int16) error { | ||||
| 	v := p.buffer[0:2] | ||||
| 	binary.BigEndian.PutUint16(v, uint16(value)) | ||||
| 	_, e := p.writer.Write(v) | ||||
| 	return NewTProtocolException(e) | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) WriteI32(value int32) error { | ||||
| 	v := p.buffer[0:4] | ||||
| 	binary.BigEndian.PutUint32(v, uint32(value)) | ||||
| 	_, e := p.writer.Write(v) | ||||
| 	return NewTProtocolException(e) | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) WriteI64(value int64) error { | ||||
| 	v := p.buffer[0:8] | ||||
| 	binary.BigEndian.PutUint64(v, uint64(value)) | ||||
| 	_, err := p.writer.Write(v) | ||||
| 	return NewTProtocolException(err) | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) WriteDouble(value float64) error { | ||||
| 	return p.WriteI64(int64(math.Float64bits(value))) | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) WriteString(value string) error { | ||||
| 	e := p.WriteI32(int32(len(value))) | ||||
| 	if e != nil { | ||||
| 		return e | ||||
| 	} | ||||
| 	_, err := p.trans.WriteString(value) | ||||
| 	return NewTProtocolException(err) | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) WriteBinary(value []byte) error { | ||||
| 	e := p.WriteI32(int32(len(value))) | ||||
| 	if e != nil { | ||||
| 		return e | ||||
| 	} | ||||
| 	_, err := p.writer.Write(value) | ||||
| 	return NewTProtocolException(err) | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Reading methods | ||||
|  */ | ||||
|  | ||||
| func (p *TBinaryProtocol) ReadMessageBegin() (name string, typeId TMessageType, seqId int32, err error) { | ||||
| 	size, e := p.ReadI32() | ||||
| 	if e != nil { | ||||
| 		return "", typeId, 0, NewTProtocolException(e) | ||||
| 	} | ||||
| 	if size < 0 { | ||||
| 		typeId = TMessageType(size & 0x0ff) | ||||
| 		version := int64(int64(size) & VERSION_MASK) | ||||
| 		if version != VERSION_1 { | ||||
| 			return name, typeId, seqId, NewTProtocolExceptionWithType(BAD_VERSION, fmt.Errorf("Bad version in ReadMessageBegin")) | ||||
| 		} | ||||
| 		name, e = p.ReadString() | ||||
| 		if e != nil { | ||||
| 			return name, typeId, seqId, NewTProtocolException(e) | ||||
| 		} | ||||
| 		seqId, e = p.ReadI32() | ||||
| 		if e != nil { | ||||
| 			return name, typeId, seqId, NewTProtocolException(e) | ||||
| 		} | ||||
| 		return name, typeId, seqId, nil | ||||
| 	} | ||||
| 	if p.strictRead { | ||||
| 		return name, typeId, seqId, NewTProtocolExceptionWithType(BAD_VERSION, fmt.Errorf("Missing version in ReadMessageBegin")) | ||||
| 	} | ||||
| 	name, e2 := p.readStringBody(size) | ||||
| 	if e2 != nil { | ||||
| 		return name, typeId, seqId, e2 | ||||
| 	} | ||||
| 	b, e3 := p.ReadByte() | ||||
| 	if e3 != nil { | ||||
| 		return name, typeId, seqId, e3 | ||||
| 	} | ||||
| 	typeId = TMessageType(b) | ||||
| 	seqId, e4 := p.ReadI32() | ||||
| 	if e4 != nil { | ||||
| 		return name, typeId, seqId, e4 | ||||
| 	} | ||||
| 	return name, typeId, seqId, nil | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) ReadMessageEnd() error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) ReadStructBegin() (name string, err error) { | ||||
| 	return | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) ReadStructEnd() error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) ReadFieldBegin() (name string, typeId TType, seqId int16, err error) { | ||||
| 	t, err := p.ReadByte() | ||||
| 	typeId = TType(t) | ||||
| 	if err != nil { | ||||
| 		return name, typeId, seqId, err | ||||
| 	} | ||||
| 	if t != STOP { | ||||
| 		seqId, err = p.ReadI16() | ||||
| 	} | ||||
| 	return name, typeId, seqId, err | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) ReadFieldEnd() error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| var invalidDataLength = NewTProtocolExceptionWithType(INVALID_DATA, errors.New("Invalid data length")) | ||||
|  | ||||
| func (p *TBinaryProtocol) ReadMapBegin() (kType, vType TType, size int, err error) { | ||||
| 	k, e := p.ReadByte() | ||||
| 	if e != nil { | ||||
| 		err = NewTProtocolException(e) | ||||
| 		return | ||||
| 	} | ||||
| 	kType = TType(k) | ||||
| 	v, e := p.ReadByte() | ||||
| 	if e != nil { | ||||
| 		err = NewTProtocolException(e) | ||||
| 		return | ||||
| 	} | ||||
| 	vType = TType(v) | ||||
| 	size32, e := p.ReadI32() | ||||
| 	if e != nil { | ||||
| 		err = NewTProtocolException(e) | ||||
| 		return | ||||
| 	} | ||||
| 	if size32 < 0 { | ||||
| 		err = invalidDataLength | ||||
| 		return | ||||
| 	} | ||||
| 	size = int(size32) | ||||
| 	return kType, vType, size, nil | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) ReadMapEnd() error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) ReadListBegin() (elemType TType, size int, err error) { | ||||
| 	b, e := p.ReadByte() | ||||
| 	if e != nil { | ||||
| 		err = NewTProtocolException(e) | ||||
| 		return | ||||
| 	} | ||||
| 	elemType = TType(b) | ||||
| 	size32, e := p.ReadI32() | ||||
| 	if e != nil { | ||||
| 		err = NewTProtocolException(e) | ||||
| 		return | ||||
| 	} | ||||
| 	if size32 < 0 { | ||||
| 		err = invalidDataLength | ||||
| 		return | ||||
| 	} | ||||
| 	size = int(size32) | ||||
|  | ||||
| 	return | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) ReadListEnd() error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) ReadSetBegin() (elemType TType, size int, err error) { | ||||
| 	b, e := p.ReadByte() | ||||
| 	if e != nil { | ||||
| 		err = NewTProtocolException(e) | ||||
| 		return | ||||
| 	} | ||||
| 	elemType = TType(b) | ||||
| 	size32, e := p.ReadI32() | ||||
| 	if e != nil { | ||||
| 		err = NewTProtocolException(e) | ||||
| 		return | ||||
| 	} | ||||
| 	if size32 < 0 { | ||||
| 		err = invalidDataLength | ||||
| 		return | ||||
| 	} | ||||
| 	size = int(size32) | ||||
| 	return elemType, size, nil | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) ReadSetEnd() error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) ReadBool() (bool, error) { | ||||
| 	b, e := p.ReadByte() | ||||
| 	v := true | ||||
| 	if b != 1 { | ||||
| 		v = false | ||||
| 	} | ||||
| 	return v, e | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) ReadByte() (int8, error) { | ||||
| 	v, err := p.trans.ReadByte() | ||||
| 	return int8(v), err | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) ReadI16() (value int16, err error) { | ||||
| 	buf := p.buffer[0:2] | ||||
| 	err = p.readAll(buf) | ||||
| 	value = int16(binary.BigEndian.Uint16(buf)) | ||||
| 	return value, err | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) ReadI32() (value int32, err error) { | ||||
| 	buf := p.buffer[0:4] | ||||
| 	err = p.readAll(buf) | ||||
| 	value = int32(binary.BigEndian.Uint32(buf)) | ||||
| 	return value, err | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) ReadI64() (value int64, err error) { | ||||
| 	buf := p.buffer[0:8] | ||||
| 	err = p.readAll(buf) | ||||
| 	value = int64(binary.BigEndian.Uint64(buf)) | ||||
| 	return value, err | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) ReadDouble() (value float64, err error) { | ||||
| 	buf := p.buffer[0:8] | ||||
| 	err = p.readAll(buf) | ||||
| 	value = math.Float64frombits(binary.BigEndian.Uint64(buf)) | ||||
| 	return value, err | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) ReadString() (value string, err error) { | ||||
| 	size, e := p.ReadI32() | ||||
| 	if e != nil { | ||||
| 		return "", e | ||||
| 	} | ||||
| 	if size < 0 { | ||||
| 		err = invalidDataLength | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	return p.readStringBody(size) | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) ReadBinary() ([]byte, error) { | ||||
| 	size, e := p.ReadI32() | ||||
| 	if e != nil { | ||||
| 		return nil, e | ||||
| 	} | ||||
| 	if size < 0 { | ||||
| 		return nil, invalidDataLength | ||||
| 	} | ||||
| 	if uint64(size) > p.trans.RemainingBytes() { | ||||
| 		return nil, invalidDataLength | ||||
| 	} | ||||
|  | ||||
| 	isize := int(size) | ||||
| 	buf := make([]byte, isize) | ||||
| 	_, err := io.ReadFull(p.trans, buf) | ||||
| 	return buf, NewTProtocolException(err) | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) Flush() (err error) { | ||||
| 	return NewTProtocolException(p.trans.Flush()) | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) Skip(fieldType TType) (err error) { | ||||
| 	return SkipDefaultDepth(p, fieldType) | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) Transport() TTransport { | ||||
| 	return p.origTransport | ||||
| } | ||||
|  | ||||
| func (p *TBinaryProtocol) readAll(buf []byte) error { | ||||
| 	_, err := io.ReadFull(p.reader, buf) | ||||
| 	return NewTProtocolException(err) | ||||
| } | ||||
|  | ||||
| const readLimit = 32768 | ||||
|  | ||||
| func (p *TBinaryProtocol) readStringBody(size int32) (value string, err error) { | ||||
| 	if size < 0 { | ||||
| 		return "", nil | ||||
| 	} | ||||
| 	if uint64(size) > p.trans.RemainingBytes() { | ||||
| 		return "", invalidDataLength | ||||
| 	} | ||||
|  | ||||
| 	var ( | ||||
| 		buf bytes.Buffer | ||||
| 		e   error | ||||
| 		b   []byte | ||||
| 	) | ||||
|  | ||||
| 	switch { | ||||
| 	case int(size) <= len(p.buffer): | ||||
| 		b = p.buffer[:size] // avoids allocation for small reads | ||||
| 	case int(size) < readLimit: | ||||
| 		b = make([]byte, size) | ||||
| 	default: | ||||
| 		b = make([]byte, readLimit) | ||||
| 	} | ||||
|  | ||||
| 	for size > 0 { | ||||
| 		_, e = io.ReadFull(p.trans, b) | ||||
| 		buf.Write(b) | ||||
| 		if e != nil { | ||||
| 			break | ||||
| 		} | ||||
| 		size -= readLimit | ||||
| 		if size < readLimit && size > 0 { | ||||
| 			b = b[:size] | ||||
| 		} | ||||
| 	} | ||||
| 	return buf.String(), NewTProtocolException(e) | ||||
| } | ||||
							
								
								
									
										815
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/compact_protocol.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										815
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/compact_protocol.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,815 @@ | ||||
| /* | ||||
|  * 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 | ||||
|  | ||||
| import ( | ||||
| 	"encoding/binary" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"math" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	COMPACT_PROTOCOL_ID       = 0x082 | ||||
| 	COMPACT_VERSION           = 1 | ||||
| 	COMPACT_VERSION_MASK      = 0x1f | ||||
| 	COMPACT_TYPE_MASK         = 0x0E0 | ||||
| 	COMPACT_TYPE_BITS         = 0x07 | ||||
| 	COMPACT_TYPE_SHIFT_AMOUNT = 5 | ||||
| ) | ||||
|  | ||||
| type tCompactType byte | ||||
|  | ||||
| const ( | ||||
| 	COMPACT_BOOLEAN_TRUE  = 0x01 | ||||
| 	COMPACT_BOOLEAN_FALSE = 0x02 | ||||
| 	COMPACT_BYTE          = 0x03 | ||||
| 	COMPACT_I16           = 0x04 | ||||
| 	COMPACT_I32           = 0x05 | ||||
| 	COMPACT_I64           = 0x06 | ||||
| 	COMPACT_DOUBLE        = 0x07 | ||||
| 	COMPACT_BINARY        = 0x08 | ||||
| 	COMPACT_LIST          = 0x09 | ||||
| 	COMPACT_SET           = 0x0A | ||||
| 	COMPACT_MAP           = 0x0B | ||||
| 	COMPACT_STRUCT        = 0x0C | ||||
| ) | ||||
|  | ||||
| var ( | ||||
| 	ttypeToCompactType map[TType]tCompactType | ||||
| ) | ||||
|  | ||||
| func init() { | ||||
| 	ttypeToCompactType = map[TType]tCompactType{ | ||||
| 		STOP:   STOP, | ||||
| 		BOOL:   COMPACT_BOOLEAN_TRUE, | ||||
| 		BYTE:   COMPACT_BYTE, | ||||
| 		I16:    COMPACT_I16, | ||||
| 		I32:    COMPACT_I32, | ||||
| 		I64:    COMPACT_I64, | ||||
| 		DOUBLE: COMPACT_DOUBLE, | ||||
| 		STRING: COMPACT_BINARY, | ||||
| 		LIST:   COMPACT_LIST, | ||||
| 		SET:    COMPACT_SET, | ||||
| 		MAP:    COMPACT_MAP, | ||||
| 		STRUCT: COMPACT_STRUCT, | ||||
| 	} | ||||
| } | ||||
|  | ||||
| type TCompactProtocolFactory struct{} | ||||
|  | ||||
| func NewTCompactProtocolFactory() *TCompactProtocolFactory { | ||||
| 	return &TCompactProtocolFactory{} | ||||
| } | ||||
|  | ||||
| func (p *TCompactProtocolFactory) GetProtocol(trans TTransport) TProtocol { | ||||
| 	return NewTCompactProtocol(trans) | ||||
| } | ||||
|  | ||||
| type TCompactProtocol struct { | ||||
| 	trans         TRichTransport | ||||
| 	origTransport TTransport | ||||
|  | ||||
| 	// Used to keep track of the last field for the current and previous structs, | ||||
| 	// so we can do the delta stuff. | ||||
| 	lastField   []int | ||||
| 	lastFieldId int | ||||
|  | ||||
| 	// If we encounter a boolean field begin, save the TField here so it can | ||||
| 	// have the value incorporated. | ||||
| 	booleanFieldName    string | ||||
| 	booleanFieldId      int16 | ||||
| 	booleanFieldPending bool | ||||
|  | ||||
| 	// If we read a field header, and it's a boolean field, save the boolean | ||||
| 	// value here so that readBool can use it. | ||||
| 	boolValue          bool | ||||
| 	boolValueIsNotNull bool | ||||
| 	buffer             [64]byte | ||||
| } | ||||
|  | ||||
| // Create a TCompactProtocol given a TTransport | ||||
| func NewTCompactProtocol(trans TTransport) *TCompactProtocol { | ||||
| 	p := &TCompactProtocol{origTransport: trans, lastField: []int{}} | ||||
| 	if et, ok := trans.(TRichTransport); ok { | ||||
| 		p.trans = et | ||||
| 	} else { | ||||
| 		p.trans = NewTRichTransport(trans) | ||||
| 	} | ||||
|  | ||||
| 	return p | ||||
|  | ||||
| } | ||||
|  | ||||
| // | ||||
| // Public Writing methods. | ||||
| // | ||||
|  | ||||
| // Write a message header to the wire. Compact Protocol messages contain the | ||||
| // protocol version so we can migrate forwards in the future if need be. | ||||
| func (p *TCompactProtocol) WriteMessageBegin(name string, typeId TMessageType, seqid int32) error { | ||||
| 	err := p.writeByteDirect(COMPACT_PROTOCOL_ID) | ||||
| 	if err != nil { | ||||
| 		return NewTProtocolException(err) | ||||
| 	} | ||||
| 	err = p.writeByteDirect((COMPACT_VERSION & COMPACT_VERSION_MASK) | ((byte(typeId) << COMPACT_TYPE_SHIFT_AMOUNT) & COMPACT_TYPE_MASK)) | ||||
| 	if err != nil { | ||||
| 		return NewTProtocolException(err) | ||||
| 	} | ||||
| 	_, err = p.writeVarint32(seqid) | ||||
| 	if err != nil { | ||||
| 		return NewTProtocolException(err) | ||||
| 	} | ||||
| 	e := p.WriteString(name) | ||||
| 	return e | ||||
|  | ||||
| } | ||||
|  | ||||
| func (p *TCompactProtocol) WriteMessageEnd() error { return nil } | ||||
|  | ||||
| // Write a struct begin. This doesn't actually put anything on the wire. We | ||||
| // use it as an opportunity to put special placeholder markers on the field | ||||
| // stack so we can get the field id deltas correct. | ||||
| func (p *TCompactProtocol) WriteStructBegin(name string) error { | ||||
| 	p.lastField = append(p.lastField, p.lastFieldId) | ||||
| 	p.lastFieldId = 0 | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Write a struct end. This doesn't actually put anything on the wire. We use | ||||
| // this as an opportunity to pop the last field from the current struct off | ||||
| // of the field stack. | ||||
| func (p *TCompactProtocol) WriteStructEnd() error { | ||||
| 	p.lastFieldId = p.lastField[len(p.lastField)-1] | ||||
| 	p.lastField = p.lastField[:len(p.lastField)-1] | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (p *TCompactProtocol) WriteFieldBegin(name string, typeId TType, id int16) error { | ||||
| 	if typeId == BOOL { | ||||
| 		// we want to possibly include the value, so we'll wait. | ||||
| 		p.booleanFieldName, p.booleanFieldId, p.booleanFieldPending = name, id, true | ||||
| 		return nil | ||||
| 	} | ||||
| 	_, err := p.writeFieldBeginInternal(name, typeId, id, 0xFF) | ||||
| 	return NewTProtocolException(err) | ||||
| } | ||||
|  | ||||
| // The workhorse of writeFieldBegin. It has the option of doing a | ||||
| // 'type override' of the type header. This is used specifically in the | ||||
| // boolean field case. | ||||
| func (p *TCompactProtocol) writeFieldBeginInternal(name string, typeId TType, id int16, typeOverride byte) (int, error) { | ||||
| 	// short lastField = lastField_.pop(); | ||||
|  | ||||
| 	// if there's a type override, use that. | ||||
| 	var typeToWrite byte | ||||
| 	if typeOverride == 0xFF { | ||||
| 		typeToWrite = byte(p.getCompactType(typeId)) | ||||
| 	} else { | ||||
| 		typeToWrite = typeOverride | ||||
| 	} | ||||
| 	// check if we can use delta encoding for the field id | ||||
| 	fieldId := int(id) | ||||
| 	written := 0 | ||||
| 	if fieldId > p.lastFieldId && fieldId-p.lastFieldId <= 15 { | ||||
| 		// write them together | ||||
| 		err := p.writeByteDirect(byte((fieldId-p.lastFieldId)<<4) | typeToWrite) | ||||
| 		if err != nil { | ||||
| 			return 0, err | ||||
| 		} | ||||
| 	} else { | ||||
| 		// write them separate | ||||
| 		err := p.writeByteDirect(typeToWrite) | ||||
| 		if err != nil { | ||||
| 			return 0, err | ||||
| 		} | ||||
| 		err = p.WriteI16(id) | ||||
| 		written = 1 + 2 | ||||
| 		if err != nil { | ||||
| 			return 0, err | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	p.lastFieldId = fieldId | ||||
| 	// p.lastField.Push(field.id); | ||||
| 	return written, nil | ||||
| } | ||||
|  | ||||
| func (p *TCompactProtocol) WriteFieldEnd() error { return nil } | ||||
|  | ||||
| func (p *TCompactProtocol) WriteFieldStop() error { | ||||
| 	err := p.writeByteDirect(STOP) | ||||
| 	return NewTProtocolException(err) | ||||
| } | ||||
|  | ||||
| func (p *TCompactProtocol) WriteMapBegin(keyType TType, valueType TType, size int) error { | ||||
| 	if size == 0 { | ||||
| 		err := p.writeByteDirect(0) | ||||
| 		return NewTProtocolException(err) | ||||
| 	} | ||||
| 	_, err := p.writeVarint32(int32(size)) | ||||
| 	if err != nil { | ||||
| 		return NewTProtocolException(err) | ||||
| 	} | ||||
| 	err = p.writeByteDirect(byte(p.getCompactType(keyType))<<4 | byte(p.getCompactType(valueType))) | ||||
| 	return NewTProtocolException(err) | ||||
| } | ||||
|  | ||||
| func (p *TCompactProtocol) WriteMapEnd() error { return nil } | ||||
|  | ||||
| // Write a list header. | ||||
| func (p *TCompactProtocol) WriteListBegin(elemType TType, size int) error { | ||||
| 	_, err := p.writeCollectionBegin(elemType, size) | ||||
| 	return NewTProtocolException(err) | ||||
| } | ||||
|  | ||||
| func (p *TCompactProtocol) WriteListEnd() error { return nil } | ||||
|  | ||||
| // Write a set header. | ||||
| func (p *TCompactProtocol) WriteSetBegin(elemType TType, size int) error { | ||||
| 	_, err := p.writeCollectionBegin(elemType, size) | ||||
| 	return NewTProtocolException(err) | ||||
| } | ||||
|  | ||||
| func (p *TCompactProtocol) WriteSetEnd() error { return nil } | ||||
|  | ||||
| func (p *TCompactProtocol) WriteBool(value bool) error { | ||||
| 	v := byte(COMPACT_BOOLEAN_FALSE) | ||||
| 	if value { | ||||
| 		v = byte(COMPACT_BOOLEAN_TRUE) | ||||
| 	} | ||||
| 	if p.booleanFieldPending { | ||||
| 		// we haven't written the field header yet | ||||
| 		_, err := p.writeFieldBeginInternal(p.booleanFieldName, BOOL, p.booleanFieldId, v) | ||||
| 		p.booleanFieldPending = false | ||||
| 		return NewTProtocolException(err) | ||||
| 	} | ||||
| 	// we're not part of a field, so just write the value. | ||||
| 	err := p.writeByteDirect(v) | ||||
| 	return NewTProtocolException(err) | ||||
| } | ||||
|  | ||||
| // Write a byte. Nothing to see here! | ||||
| func (p *TCompactProtocol) WriteByte(value int8) error { | ||||
| 	err := p.writeByteDirect(byte(value)) | ||||
| 	return NewTProtocolException(err) | ||||
| } | ||||
|  | ||||
| // Write an I16 as a zigzag varint. | ||||
| func (p *TCompactProtocol) WriteI16(value int16) error { | ||||
| 	_, err := p.writeVarint32(p.int32ToZigzag(int32(value))) | ||||
| 	return NewTProtocolException(err) | ||||
| } | ||||
|  | ||||
| // Write an i32 as a zigzag varint. | ||||
| func (p *TCompactProtocol) WriteI32(value int32) error { | ||||
| 	_, err := p.writeVarint32(p.int32ToZigzag(value)) | ||||
| 	return NewTProtocolException(err) | ||||
| } | ||||
|  | ||||
| // Write an i64 as a zigzag varint. | ||||
| func (p *TCompactProtocol) WriteI64(value int64) error { | ||||
| 	_, err := p.writeVarint64(p.int64ToZigzag(value)) | ||||
| 	return NewTProtocolException(err) | ||||
| } | ||||
|  | ||||
| // Write a double to the wire as 8 bytes. | ||||
| func (p *TCompactProtocol) WriteDouble(value float64) error { | ||||
| 	buf := p.buffer[0:8] | ||||
| 	binary.LittleEndian.PutUint64(buf, math.Float64bits(value)) | ||||
| 	_, err := p.trans.Write(buf) | ||||
| 	return NewTProtocolException(err) | ||||
| } | ||||
|  | ||||
| // Write a string to the wire with a varint size preceding. | ||||
| func (p *TCompactProtocol) WriteString(value string) error { | ||||
| 	_, e := p.writeVarint32(int32(len(value))) | ||||
| 	if e != nil { | ||||
| 		return NewTProtocolException(e) | ||||
| 	} | ||||
| 	if len(value) > 0 { | ||||
| 	} | ||||
| 	_, e = p.trans.WriteString(value) | ||||
| 	return e | ||||
| } | ||||
|  | ||||
| // Write a byte array, using a varint for the size. | ||||
| func (p *TCompactProtocol) WriteBinary(bin []byte) error { | ||||
| 	_, e := p.writeVarint32(int32(len(bin))) | ||||
| 	if e != nil { | ||||
| 		return NewTProtocolException(e) | ||||
| 	} | ||||
| 	if len(bin) > 0 { | ||||
| 		_, e = p.trans.Write(bin) | ||||
| 		return NewTProtocolException(e) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // | ||||
| // Reading methods. | ||||
| // | ||||
|  | ||||
| // Read a message header. | ||||
| func (p *TCompactProtocol) ReadMessageBegin() (name string, typeId TMessageType, seqId int32, err error) { | ||||
|  | ||||
| 	protocolId, err := p.readByteDirect() | ||||
| 	if err != nil { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	if protocolId != COMPACT_PROTOCOL_ID { | ||||
| 		e := fmt.Errorf("Expected protocol id %02x but got %02x", COMPACT_PROTOCOL_ID, protocolId) | ||||
| 		return "", typeId, seqId, NewTProtocolExceptionWithType(BAD_VERSION, e) | ||||
| 	} | ||||
|  | ||||
| 	versionAndType, err := p.readByteDirect() | ||||
| 	if err != nil { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	version := versionAndType & COMPACT_VERSION_MASK | ||||
| 	typeId = TMessageType((versionAndType >> COMPACT_TYPE_SHIFT_AMOUNT) & COMPACT_TYPE_BITS) | ||||
| 	if version != COMPACT_VERSION { | ||||
| 		e := fmt.Errorf("Expected version %02x but got %02x", COMPACT_VERSION, version) | ||||
| 		err = NewTProtocolExceptionWithType(BAD_VERSION, e) | ||||
| 		return | ||||
| 	} | ||||
| 	seqId, e := p.readVarint32() | ||||
| 	if e != nil { | ||||
| 		err = NewTProtocolException(e) | ||||
| 		return | ||||
| 	} | ||||
| 	name, err = p.ReadString() | ||||
| 	return | ||||
| } | ||||
|  | ||||
| func (p *TCompactProtocol) ReadMessageEnd() error { return nil } | ||||
|  | ||||
| // Read a struct begin. There's nothing on the wire for this, but it is our | ||||
| // opportunity to push a new struct begin marker onto the field stack. | ||||
| func (p *TCompactProtocol) ReadStructBegin() (name string, err error) { | ||||
| 	p.lastField = append(p.lastField, p.lastFieldId) | ||||
| 	p.lastFieldId = 0 | ||||
| 	return | ||||
| } | ||||
|  | ||||
| // Doesn't actually consume any wire data, just removes the last field for | ||||
| // this struct from the field stack. | ||||
| func (p *TCompactProtocol) ReadStructEnd() error { | ||||
| 	// consume the last field we read off the wire. | ||||
| 	p.lastFieldId = p.lastField[len(p.lastField)-1] | ||||
| 	p.lastField = p.lastField[:len(p.lastField)-1] | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Read a field header off the wire. | ||||
| func (p *TCompactProtocol) ReadFieldBegin() (name string, typeId TType, id int16, err error) { | ||||
| 	t, err := p.readByteDirect() | ||||
| 	if err != nil { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	// if it's a stop, then we can return immediately, as the struct is over. | ||||
| 	if (t & 0x0f) == STOP { | ||||
| 		return "", STOP, 0, nil | ||||
| 	} | ||||
|  | ||||
| 	// mask off the 4 MSB of the type header. it could contain a field id delta. | ||||
| 	modifier := int16((t & 0xf0) >> 4) | ||||
| 	if modifier == 0 { | ||||
| 		// not a delta. look ahead for the zigzag varint field id. | ||||
| 		id, err = p.ReadI16() | ||||
| 		if err != nil { | ||||
| 			return | ||||
| 		} | ||||
| 	} else { | ||||
| 		// has a delta. add the delta to the last read field id. | ||||
| 		id = int16(p.lastFieldId) + modifier | ||||
| 	} | ||||
| 	typeId, e := p.getTType(tCompactType(t & 0x0f)) | ||||
| 	if e != nil { | ||||
| 		err = NewTProtocolException(e) | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	// if this happens to be a boolean field, the value is encoded in the type | ||||
| 	if p.isBoolType(t) { | ||||
| 		// save the boolean value in a special instance variable. | ||||
| 		p.boolValue = (byte(t)&0x0f == COMPACT_BOOLEAN_TRUE) | ||||
| 		p.boolValueIsNotNull = true | ||||
| 	} | ||||
|  | ||||
| 	// push the new field onto the field stack so we can keep the deltas going. | ||||
| 	p.lastFieldId = int(id) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| func (p *TCompactProtocol) ReadFieldEnd() error { return nil } | ||||
|  | ||||
| // Read a map header off the wire. If the size is zero, skip reading the key | ||||
| // and value type. This means that 0-length maps will yield TMaps without the | ||||
| // "correct" types. | ||||
| func (p *TCompactProtocol) ReadMapBegin() (keyType TType, valueType TType, size int, err error) { | ||||
| 	size32, e := p.readVarint32() | ||||
| 	if e != nil { | ||||
| 		err = NewTProtocolException(e) | ||||
| 		return | ||||
| 	} | ||||
| 	if size32 < 0 { | ||||
| 		err = invalidDataLength | ||||
| 		return | ||||
| 	} | ||||
| 	size = int(size32) | ||||
|  | ||||
| 	keyAndValueType := byte(STOP) | ||||
| 	if size != 0 { | ||||
| 		keyAndValueType, err = p.readByteDirect() | ||||
| 		if err != nil { | ||||
| 			return | ||||
| 		} | ||||
| 	} | ||||
| 	keyType, _ = p.getTType(tCompactType(keyAndValueType >> 4)) | ||||
| 	valueType, _ = p.getTType(tCompactType(keyAndValueType & 0xf)) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| func (p *TCompactProtocol) ReadMapEnd() error { return nil } | ||||
|  | ||||
| // Read a list header off the wire. If the list size is 0-14, the size will | ||||
| // be packed into the element type header. If it's a longer list, the 4 MSB | ||||
| // of the element type header will be 0xF, and a varint will follow with the | ||||
| // true size. | ||||
| func (p *TCompactProtocol) ReadListBegin() (elemType TType, size int, err error) { | ||||
| 	size_and_type, err := p.readByteDirect() | ||||
| 	if err != nil { | ||||
| 		return | ||||
| 	} | ||||
| 	size = int((size_and_type >> 4) & 0x0f) | ||||
| 	if size == 15 { | ||||
| 		size2, e := p.readVarint32() | ||||
| 		if e != nil { | ||||
| 			err = NewTProtocolException(e) | ||||
| 			return | ||||
| 		} | ||||
| 		if size2 < 0 { | ||||
| 			err = invalidDataLength | ||||
| 			return | ||||
| 		} | ||||
| 		size = int(size2) | ||||
| 	} | ||||
| 	elemType, e := p.getTType(tCompactType(size_and_type)) | ||||
| 	if e != nil { | ||||
| 		err = NewTProtocolException(e) | ||||
| 		return | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
|  | ||||
| func (p *TCompactProtocol) ReadListEnd() error { return nil } | ||||
|  | ||||
| // Read a set header off the wire. If the set size is 0-14, the size will | ||||
| // be packed into the element type header. If it's a longer set, the 4 MSB | ||||
| // of the element type header will be 0xF, and a varint will follow with the | ||||
| // true size. | ||||
| func (p *TCompactProtocol) ReadSetBegin() (elemType TType, size int, err error) { | ||||
| 	return p.ReadListBegin() | ||||
| } | ||||
|  | ||||
| func (p *TCompactProtocol) ReadSetEnd() error { return nil } | ||||
|  | ||||
| // Read a boolean off the wire. If this is a boolean field, the value should | ||||
| // already have been read during readFieldBegin, so we'll just consume the | ||||
| // pre-stored value. Otherwise, read a byte. | ||||
| func (p *TCompactProtocol) ReadBool() (value bool, err error) { | ||||
| 	if p.boolValueIsNotNull { | ||||
| 		p.boolValueIsNotNull = false | ||||
| 		return p.boolValue, nil | ||||
| 	} | ||||
| 	v, err := p.readByteDirect() | ||||
| 	return v == COMPACT_BOOLEAN_TRUE, err | ||||
| } | ||||
|  | ||||
| // Read a single byte off the wire. Nothing interesting here. | ||||
| func (p *TCompactProtocol) ReadByte() (int8, error) { | ||||
| 	v, err := p.readByteDirect() | ||||
| 	if err != nil { | ||||
| 		return 0, NewTProtocolException(err) | ||||
| 	} | ||||
| 	return int8(v), err | ||||
| } | ||||
|  | ||||
| // Read an i16 from the wire as a zigzag varint. | ||||
| func (p *TCompactProtocol) ReadI16() (value int16, err error) { | ||||
| 	v, err := p.ReadI32() | ||||
| 	return int16(v), err | ||||
| } | ||||
|  | ||||
| // Read an i32 from the wire as a zigzag varint. | ||||
| func (p *TCompactProtocol) ReadI32() (value int32, err error) { | ||||
| 	v, e := p.readVarint32() | ||||
| 	if e != nil { | ||||
| 		return 0, NewTProtocolException(e) | ||||
| 	} | ||||
| 	value = p.zigzagToInt32(v) | ||||
| 	return value, nil | ||||
| } | ||||
|  | ||||
| // Read an i64 from the wire as a zigzag varint. | ||||
| func (p *TCompactProtocol) ReadI64() (value int64, err error) { | ||||
| 	v, e := p.readVarint64() | ||||
| 	if e != nil { | ||||
| 		return 0, NewTProtocolException(e) | ||||
| 	} | ||||
| 	value = p.zigzagToInt64(v) | ||||
| 	return value, nil | ||||
| } | ||||
|  | ||||
| // No magic here - just read a double off the wire. | ||||
| func (p *TCompactProtocol) ReadDouble() (value float64, err error) { | ||||
| 	longBits := p.buffer[0:8] | ||||
| 	_, e := io.ReadFull(p.trans, longBits) | ||||
| 	if e != nil { | ||||
| 		return 0.0, NewTProtocolException(e) | ||||
| 	} | ||||
| 	return math.Float64frombits(p.bytesToUint64(longBits)), nil | ||||
| } | ||||
|  | ||||
| // Reads a []byte (via readBinary), and then UTF-8 decodes it. | ||||
| func (p *TCompactProtocol) ReadString() (value string, err error) { | ||||
| 	length, e := p.readVarint32() | ||||
| 	if e != nil { | ||||
| 		return "", NewTProtocolException(e) | ||||
| 	} | ||||
| 	if length < 0 { | ||||
| 		return "", invalidDataLength | ||||
| 	} | ||||
| 	if uint64(length) > p.trans.RemainingBytes() { | ||||
| 		return "", invalidDataLength | ||||
| 	} | ||||
|  | ||||
| 	if length == 0 { | ||||
| 		return "", nil | ||||
| 	} | ||||
| 	var buf []byte | ||||
| 	if length <= int32(len(p.buffer)) { | ||||
| 		buf = p.buffer[0:length] | ||||
| 	} else { | ||||
| 		buf = make([]byte, length) | ||||
| 	} | ||||
| 	_, e = io.ReadFull(p.trans, buf) | ||||
| 	return string(buf), NewTProtocolException(e) | ||||
| } | ||||
|  | ||||
| // Read a []byte from the wire. | ||||
| func (p *TCompactProtocol) ReadBinary() (value []byte, err error) { | ||||
| 	length, e := p.readVarint32() | ||||
| 	if e != nil { | ||||
| 		return nil, NewTProtocolException(e) | ||||
| 	} | ||||
| 	if length == 0 { | ||||
| 		return []byte{}, nil | ||||
| 	} | ||||
| 	if length < 0 { | ||||
| 		return nil, invalidDataLength | ||||
| 	} | ||||
| 	if uint64(length) > p.trans.RemainingBytes() { | ||||
| 		return nil, invalidDataLength | ||||
| 	} | ||||
|  | ||||
| 	buf := make([]byte, length) | ||||
| 	_, e = io.ReadFull(p.trans, buf) | ||||
| 	return buf, NewTProtocolException(e) | ||||
| } | ||||
|  | ||||
| func (p *TCompactProtocol) Flush() (err error) { | ||||
| 	return NewTProtocolException(p.trans.Flush()) | ||||
| } | ||||
|  | ||||
| func (p *TCompactProtocol) Skip(fieldType TType) (err error) { | ||||
| 	return SkipDefaultDepth(p, fieldType) | ||||
| } | ||||
|  | ||||
| func (p *TCompactProtocol) Transport() TTransport { | ||||
| 	return p.origTransport | ||||
| } | ||||
|  | ||||
| // | ||||
| // Internal writing methods | ||||
| // | ||||
|  | ||||
| // Abstract method for writing the start of lists and sets. List and sets on | ||||
| // the wire differ only by the type indicator. | ||||
| func (p *TCompactProtocol) writeCollectionBegin(elemType TType, size int) (int, error) { | ||||
| 	if size <= 14 { | ||||
| 		return 1, p.writeByteDirect(byte(int32(size<<4) | int32(p.getCompactType(elemType)))) | ||||
| 	} | ||||
| 	err := p.writeByteDirect(0xf0 | byte(p.getCompactType(elemType))) | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 	m, err := p.writeVarint32(int32(size)) | ||||
| 	return 1 + m, err | ||||
| } | ||||
|  | ||||
| // Write an i32 as a varint. Results in 1-5 bytes on the wire. | ||||
| // TODO(pomack): make a permanent buffer like writeVarint64? | ||||
| func (p *TCompactProtocol) writeVarint32(n int32) (int, error) { | ||||
| 	i32buf := p.buffer[0:5] | ||||
| 	idx := 0 | ||||
| 	for { | ||||
| 		if (n & ^0x7F) == 0 { | ||||
| 			i32buf[idx] = byte(n) | ||||
| 			idx++ | ||||
| 			// p.writeByteDirect(byte(n)); | ||||
| 			break | ||||
| 			// return; | ||||
| 		} else { | ||||
| 			i32buf[idx] = byte((n & 0x7F) | 0x80) | ||||
| 			idx++ | ||||
| 			// p.writeByteDirect(byte(((n & 0x7F) | 0x80))); | ||||
| 			u := uint32(n) | ||||
| 			n = int32(u >> 7) | ||||
| 		} | ||||
| 	} | ||||
| 	return p.trans.Write(i32buf[0:idx]) | ||||
| } | ||||
|  | ||||
| // Write an i64 as a varint. Results in 1-10 bytes on the wire. | ||||
| func (p *TCompactProtocol) writeVarint64(n int64) (int, error) { | ||||
| 	varint64out := p.buffer[0:10] | ||||
| 	idx := 0 | ||||
| 	for { | ||||
| 		if (n & ^0x7F) == 0 { | ||||
| 			varint64out[idx] = byte(n) | ||||
| 			idx++ | ||||
| 			break | ||||
| 		} else { | ||||
| 			varint64out[idx] = byte((n & 0x7F) | 0x80) | ||||
| 			idx++ | ||||
| 			u := uint64(n) | ||||
| 			n = int64(u >> 7) | ||||
| 		} | ||||
| 	} | ||||
| 	return p.trans.Write(varint64out[0:idx]) | ||||
| } | ||||
|  | ||||
| // Convert l into a zigzag long. This allows negative numbers to be | ||||
| // represented compactly as a varint. | ||||
| func (p *TCompactProtocol) int64ToZigzag(l int64) int64 { | ||||
| 	return (l << 1) ^ (l >> 63) | ||||
| } | ||||
|  | ||||
| // Convert l into a zigzag long. This allows negative numbers to be | ||||
| // represented compactly as a varint. | ||||
| func (p *TCompactProtocol) int32ToZigzag(n int32) int32 { | ||||
| 	return (n << 1) ^ (n >> 31) | ||||
| } | ||||
|  | ||||
| func (p *TCompactProtocol) fixedUint64ToBytes(n uint64, buf []byte) { | ||||
| 	binary.LittleEndian.PutUint64(buf, n) | ||||
| } | ||||
|  | ||||
| func (p *TCompactProtocol) fixedInt64ToBytes(n int64, buf []byte) { | ||||
| 	binary.LittleEndian.PutUint64(buf, uint64(n)) | ||||
| } | ||||
|  | ||||
| // Writes a byte without any possibility of all that field header nonsense. | ||||
| // Used internally by other writing methods that know they need to write a byte. | ||||
| func (p *TCompactProtocol) writeByteDirect(b byte) error { | ||||
| 	return p.trans.WriteByte(b) | ||||
| } | ||||
|  | ||||
| // Writes a byte without any possibility of all that field header nonsense. | ||||
| func (p *TCompactProtocol) writeIntAsByteDirect(n int) (int, error) { | ||||
| 	return 1, p.writeByteDirect(byte(n)) | ||||
| } | ||||
|  | ||||
| // | ||||
| // Internal reading methods | ||||
| // | ||||
|  | ||||
| // Read an i32 from the wire as a varint. The MSB of each byte is set | ||||
| // if there is another byte to follow. This can read up to 5 bytes. | ||||
| func (p *TCompactProtocol) readVarint32() (int32, error) { | ||||
| 	// if the wire contains the right stuff, this will just truncate the i64 we | ||||
| 	// read and get us the right sign. | ||||
| 	v, err := p.readVarint64() | ||||
| 	return int32(v), err | ||||
| } | ||||
|  | ||||
| // Read an i64 from the wire as a proper varint. The MSB of each byte is set | ||||
| // if there is another byte to follow. This can read up to 10 bytes. | ||||
| func (p *TCompactProtocol) readVarint64() (int64, error) { | ||||
| 	shift := uint(0) | ||||
| 	result := int64(0) | ||||
| 	for { | ||||
| 		b, err := p.readByteDirect() | ||||
| 		if err != nil { | ||||
| 			return 0, err | ||||
| 		} | ||||
| 		result |= int64(b&0x7f) << shift | ||||
| 		if (b & 0x80) != 0x80 { | ||||
| 			break | ||||
| 		} | ||||
| 		shift += 7 | ||||
| 	} | ||||
| 	return result, nil | ||||
| } | ||||
|  | ||||
| // Read a byte, unlike ReadByte that reads Thrift-byte that is i8. | ||||
| func (p *TCompactProtocol) readByteDirect() (byte, error) { | ||||
| 	return p.trans.ReadByte() | ||||
| } | ||||
|  | ||||
| // | ||||
| // encoding helpers | ||||
| // | ||||
|  | ||||
| // Convert from zigzag int to int. | ||||
| func (p *TCompactProtocol) zigzagToInt32(n int32) int32 { | ||||
| 	u := uint32(n) | ||||
| 	return int32(u>>1) ^ -(n & 1) | ||||
| } | ||||
|  | ||||
| // Convert from zigzag long to long. | ||||
| func (p *TCompactProtocol) zigzagToInt64(n int64) int64 { | ||||
| 	u := uint64(n) | ||||
| 	return int64(u>>1) ^ -(n & 1) | ||||
| } | ||||
|  | ||||
| // Note that it's important that the mask bytes are long literals, | ||||
| // otherwise they'll default to ints, and when you shift an int left 56 bits, | ||||
| // you just get a messed up int. | ||||
| func (p *TCompactProtocol) bytesToInt64(b []byte) int64 { | ||||
| 	return int64(binary.LittleEndian.Uint64(b)) | ||||
| } | ||||
|  | ||||
| // Note that it's important that the mask bytes are long literals, | ||||
| // otherwise they'll default to ints, and when you shift an int left 56 bits, | ||||
| // you just get a messed up int. | ||||
| func (p *TCompactProtocol) bytesToUint64(b []byte) uint64 { | ||||
| 	return binary.LittleEndian.Uint64(b) | ||||
| } | ||||
|  | ||||
| // | ||||
| // type testing and converting | ||||
| // | ||||
|  | ||||
| func (p *TCompactProtocol) isBoolType(b byte) bool { | ||||
| 	return (b&0x0f) == COMPACT_BOOLEAN_TRUE || (b&0x0f) == COMPACT_BOOLEAN_FALSE | ||||
| } | ||||
|  | ||||
| // Given a tCompactType constant, convert it to its corresponding | ||||
| // TType value. | ||||
| func (p *TCompactProtocol) getTType(t tCompactType) (TType, error) { | ||||
| 	switch byte(t) & 0x0f { | ||||
| 	case STOP: | ||||
| 		return STOP, nil | ||||
| 	case COMPACT_BOOLEAN_FALSE, COMPACT_BOOLEAN_TRUE: | ||||
| 		return BOOL, nil | ||||
| 	case COMPACT_BYTE: | ||||
| 		return BYTE, nil | ||||
| 	case COMPACT_I16: | ||||
| 		return I16, nil | ||||
| 	case COMPACT_I32: | ||||
| 		return I32, nil | ||||
| 	case COMPACT_I64: | ||||
| 		return I64, nil | ||||
| 	case COMPACT_DOUBLE: | ||||
| 		return DOUBLE, nil | ||||
| 	case COMPACT_BINARY: | ||||
| 		return STRING, nil | ||||
| 	case COMPACT_LIST: | ||||
| 		return LIST, nil | ||||
| 	case COMPACT_SET: | ||||
| 		return SET, nil | ||||
| 	case COMPACT_MAP: | ||||
| 		return MAP, nil | ||||
| 	case COMPACT_STRUCT: | ||||
| 		return STRUCT, nil | ||||
| 	} | ||||
| 	return STOP, TException(fmt.Errorf("don't know what type: %d", t&0x0f)) | ||||
| } | ||||
|  | ||||
| // Given a TType value, find the appropriate TCompactProtocol.Types constant. | ||||
| func (p *TCompactProtocol) getCompactType(t TType) tCompactType { | ||||
| 	return ttypeToCompactType[t] | ||||
| } | ||||
							
								
								
									
										44
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/exception.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/exception.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | ||||
| /* | ||||
|  * 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 | ||||
|  | ||||
| import ( | ||||
| 	"errors" | ||||
| ) | ||||
|  | ||||
| // Generic Thrift exception | ||||
| type TException interface { | ||||
| 	error | ||||
| } | ||||
|  | ||||
| // Prepends additional information to an error without losing the Thrift exception interface | ||||
| func PrependError(prepend string, err error) error { | ||||
| 	if t, ok := err.(TTransportException); ok { | ||||
| 		return NewTTransportException(t.TypeId(), prepend+t.Error()) | ||||
| 	} | ||||
| 	if t, ok := err.(TProtocolException); ok { | ||||
| 		return NewTProtocolExceptionWithType(t.TypeId(), errors.New(prepend+err.Error())) | ||||
| 	} | ||||
| 	if t, ok := err.(TApplicationException); ok { | ||||
| 		return NewTApplicationException(t.TypeId(), prepend+t.Error()) | ||||
| 	} | ||||
|  | ||||
| 	return errors.New(prepend + err.Error()) | ||||
| } | ||||
							
								
								
									
										79
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/memory_buffer.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/memory_buffer.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,79 @@ | ||||
| /* | ||||
|  * 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 | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| ) | ||||
|  | ||||
| // Memory buffer-based implementation of the TTransport interface. | ||||
| type TMemoryBuffer struct { | ||||
| 	*bytes.Buffer | ||||
| 	size int | ||||
| } | ||||
|  | ||||
| type TMemoryBufferTransportFactory struct { | ||||
| 	size int | ||||
| } | ||||
|  | ||||
| func (p *TMemoryBufferTransportFactory) GetTransport(trans TTransport) TTransport { | ||||
| 	if trans != nil { | ||||
| 		t, ok := trans.(*TMemoryBuffer) | ||||
| 		if ok && t.size > 0 { | ||||
| 			return NewTMemoryBufferLen(t.size) | ||||
| 		} | ||||
| 	} | ||||
| 	return NewTMemoryBufferLen(p.size) | ||||
| } | ||||
|  | ||||
| func NewTMemoryBufferTransportFactory(size int) *TMemoryBufferTransportFactory { | ||||
| 	return &TMemoryBufferTransportFactory{size: size} | ||||
| } | ||||
|  | ||||
| func NewTMemoryBuffer() *TMemoryBuffer { | ||||
| 	return &TMemoryBuffer{Buffer: &bytes.Buffer{}, size: 0} | ||||
| } | ||||
|  | ||||
| func NewTMemoryBufferLen(size int) *TMemoryBuffer { | ||||
| 	buf := make([]byte, 0, size) | ||||
| 	return &TMemoryBuffer{Buffer: bytes.NewBuffer(buf), size: size} | ||||
| } | ||||
|  | ||||
| func (p *TMemoryBuffer) IsOpen() bool { | ||||
| 	return true | ||||
| } | ||||
|  | ||||
| func (p *TMemoryBuffer) Open() error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (p *TMemoryBuffer) Close() error { | ||||
| 	p.Buffer.Reset() | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| // Flushing a memory buffer is a no-op | ||||
| func (p *TMemoryBuffer) Flush() error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| func (p *TMemoryBuffer) RemainingBytes() (num_bytes uint64) { | ||||
| 	return uint64(p.Buffer.Len()) | ||||
| } | ||||
							
								
								
									
										31
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/messagetype.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/messagetype.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| /* | ||||
|  * 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 | ||||
|  | ||||
| // Message type constants in the Thrift protocol. | ||||
| type TMessageType int32 | ||||
|  | ||||
| const ( | ||||
| 	INVALID_TMESSAGE_TYPE TMessageType = 0 | ||||
| 	CALL                  TMessageType = 1 | ||||
| 	REPLY                 TMessageType = 2 | ||||
| 	EXCEPTION             TMessageType = 3 | ||||
| 	ONEWAY                TMessageType = 4 | ||||
| ) | ||||
							
								
								
									
										164
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/numeric.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										164
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/numeric.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,164 @@ | ||||
| /* | ||||
|  * 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 | ||||
|  | ||||
| import ( | ||||
| 	"math" | ||||
| 	"strconv" | ||||
| ) | ||||
|  | ||||
| type Numeric interface { | ||||
| 	Int64() int64 | ||||
| 	Int32() int32 | ||||
| 	Int16() int16 | ||||
| 	Byte() byte | ||||
| 	Int() int | ||||
| 	Float64() float64 | ||||
| 	Float32() float32 | ||||
| 	String() string | ||||
| 	isNull() bool | ||||
| } | ||||
|  | ||||
| type numeric struct { | ||||
| 	iValue int64 | ||||
| 	dValue float64 | ||||
| 	sValue string | ||||
| 	isNil  bool | ||||
| } | ||||
|  | ||||
| var ( | ||||
| 	INFINITY          Numeric | ||||
| 	NEGATIVE_INFINITY Numeric | ||||
| 	NAN               Numeric | ||||
| 	ZERO              Numeric | ||||
| 	NUMERIC_NULL      Numeric | ||||
| ) | ||||
|  | ||||
| func NewNumericFromDouble(dValue float64) Numeric { | ||||
| 	if math.IsInf(dValue, 1) { | ||||
| 		return INFINITY | ||||
| 	} | ||||
| 	if math.IsInf(dValue, -1) { | ||||
| 		return NEGATIVE_INFINITY | ||||
| 	} | ||||
| 	if math.IsNaN(dValue) { | ||||
| 		return NAN | ||||
| 	} | ||||
| 	iValue := int64(dValue) | ||||
| 	sValue := strconv.FormatFloat(dValue, 'g', 10, 64) | ||||
| 	isNil := false | ||||
| 	return &numeric{iValue: iValue, dValue: dValue, sValue: sValue, isNil: isNil} | ||||
| } | ||||
|  | ||||
| func NewNumericFromI64(iValue int64) Numeric { | ||||
| 	dValue := float64(iValue) | ||||
| 	sValue := string(iValue) | ||||
| 	isNil := false | ||||
| 	return &numeric{iValue: iValue, dValue: dValue, sValue: sValue, isNil: isNil} | ||||
| } | ||||
|  | ||||
| func NewNumericFromI32(iValue int32) Numeric { | ||||
| 	dValue := float64(iValue) | ||||
| 	sValue := string(iValue) | ||||
| 	isNil := false | ||||
| 	return &numeric{iValue: int64(iValue), dValue: dValue, sValue: sValue, isNil: isNil} | ||||
| } | ||||
|  | ||||
| func NewNumericFromString(sValue string) Numeric { | ||||
| 	if sValue == INFINITY.String() { | ||||
| 		return INFINITY | ||||
| 	} | ||||
| 	if sValue == NEGATIVE_INFINITY.String() { | ||||
| 		return NEGATIVE_INFINITY | ||||
| 	} | ||||
| 	if sValue == NAN.String() { | ||||
| 		return NAN | ||||
| 	} | ||||
| 	iValue, _ := strconv.ParseInt(sValue, 10, 64) | ||||
| 	dValue, _ := strconv.ParseFloat(sValue, 64) | ||||
| 	isNil := len(sValue) == 0 | ||||
| 	return &numeric{iValue: iValue, dValue: dValue, sValue: sValue, isNil: isNil} | ||||
| } | ||||
|  | ||||
| func NewNumericFromJSONString(sValue string, isNull bool) Numeric { | ||||
| 	if isNull { | ||||
| 		return NewNullNumeric() | ||||
| 	} | ||||
| 	if sValue == JSON_INFINITY { | ||||
| 		return INFINITY | ||||
| 	} | ||||
| 	if sValue == JSON_NEGATIVE_INFINITY { | ||||
| 		return NEGATIVE_INFINITY | ||||
| 	} | ||||
| 	if sValue == JSON_NAN { | ||||
| 		return NAN | ||||
| 	} | ||||
| 	iValue, _ := strconv.ParseInt(sValue, 10, 64) | ||||
| 	dValue, _ := strconv.ParseFloat(sValue, 64) | ||||
| 	return &numeric{iValue: iValue, dValue: dValue, sValue: sValue, isNil: isNull} | ||||
| } | ||||
|  | ||||
| func NewNullNumeric() Numeric { | ||||
| 	return &numeric{iValue: 0, dValue: 0.0, sValue: "", isNil: true} | ||||
| } | ||||
|  | ||||
| func (p *numeric) Int64() int64 { | ||||
| 	return p.iValue | ||||
| } | ||||
|  | ||||
| func (p *numeric) Int32() int32 { | ||||
| 	return int32(p.iValue) | ||||
| } | ||||
|  | ||||
| func (p *numeric) Int16() int16 { | ||||
| 	return int16(p.iValue) | ||||
| } | ||||
|  | ||||
| func (p *numeric) Byte() byte { | ||||
| 	return byte(p.iValue) | ||||
| } | ||||
|  | ||||
| func (p *numeric) Int() int { | ||||
| 	return int(p.iValue) | ||||
| } | ||||
|  | ||||
| func (p *numeric) Float64() float64 { | ||||
| 	return p.dValue | ||||
| } | ||||
|  | ||||
| func (p *numeric) Float32() float32 { | ||||
| 	return float32(p.dValue) | ||||
| } | ||||
|  | ||||
| func (p *numeric) String() string { | ||||
| 	return p.sValue | ||||
| } | ||||
|  | ||||
| func (p *numeric) isNull() bool { | ||||
| 	return p.isNil | ||||
| } | ||||
|  | ||||
| func init() { | ||||
| 	INFINITY = &numeric{iValue: 0, dValue: math.Inf(1), sValue: "Infinity", isNil: false} | ||||
| 	NEGATIVE_INFINITY = &numeric{iValue: 0, dValue: math.Inf(-1), sValue: "-Infinity", isNil: false} | ||||
| 	NAN = &numeric{iValue: 0, dValue: math.NaN(), sValue: "NaN", isNil: false} | ||||
| 	ZERO = &numeric{iValue: 0, dValue: 0, sValue: "0", isNil: false} | ||||
| 	NUMERIC_NULL = &numeric{iValue: 0, dValue: 0, sValue: "0", isNil: true} | ||||
| } | ||||
							
								
								
									
										30
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/processor.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/processor.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| /* | ||||
|  * 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 | ||||
|  | ||||
| // A processor is a generic object which operates upon an input stream and | ||||
| // writes to some output stream. | ||||
| type TProcessor interface { | ||||
| 	Process(in, out TProtocol) (bool, TException) | ||||
| } | ||||
|  | ||||
| type TProcessorFunction interface { | ||||
| 	Process(seqId int32, in, out TProtocol) (bool, TException) | ||||
| } | ||||
							
								
								
									
										175
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/protocol.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										175
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/protocol.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,175 @@ | ||||
| /* | ||||
|  * 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 | ||||
|  | ||||
| import ( | ||||
| 	"errors" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	VERSION_MASK = 0xffff0000 | ||||
| 	VERSION_1    = 0x80010000 | ||||
| ) | ||||
|  | ||||
| type TProtocol interface { | ||||
| 	WriteMessageBegin(name string, typeId TMessageType, seqid int32) error | ||||
| 	WriteMessageEnd() error | ||||
| 	WriteStructBegin(name string) error | ||||
| 	WriteStructEnd() error | ||||
| 	WriteFieldBegin(name string, typeId TType, id int16) error | ||||
| 	WriteFieldEnd() error | ||||
| 	WriteFieldStop() error | ||||
| 	WriteMapBegin(keyType TType, valueType TType, size int) error | ||||
| 	WriteMapEnd() error | ||||
| 	WriteListBegin(elemType TType, size int) error | ||||
| 	WriteListEnd() error | ||||
| 	WriteSetBegin(elemType TType, size int) error | ||||
| 	WriteSetEnd() error | ||||
| 	WriteBool(value bool) error | ||||
| 	WriteByte(value int8) error | ||||
| 	WriteI16(value int16) error | ||||
| 	WriteI32(value int32) error | ||||
| 	WriteI64(value int64) error | ||||
| 	WriteDouble(value float64) error | ||||
| 	WriteString(value string) error | ||||
| 	WriteBinary(value []byte) error | ||||
|  | ||||
| 	ReadMessageBegin() (name string, typeId TMessageType, seqid int32, err error) | ||||
| 	ReadMessageEnd() error | ||||
| 	ReadStructBegin() (name string, err error) | ||||
| 	ReadStructEnd() error | ||||
| 	ReadFieldBegin() (name string, typeId TType, id int16, err error) | ||||
| 	ReadFieldEnd() error | ||||
| 	ReadMapBegin() (keyType TType, valueType TType, size int, err error) | ||||
| 	ReadMapEnd() error | ||||
| 	ReadListBegin() (elemType TType, size int, err error) | ||||
| 	ReadListEnd() error | ||||
| 	ReadSetBegin() (elemType TType, size int, err error) | ||||
| 	ReadSetEnd() error | ||||
| 	ReadBool() (value bool, err error) | ||||
| 	ReadByte() (value int8, err error) | ||||
| 	ReadI16() (value int16, err error) | ||||
| 	ReadI32() (value int32, err error) | ||||
| 	ReadI64() (value int64, err error) | ||||
| 	ReadDouble() (value float64, err error) | ||||
| 	ReadString() (value string, err error) | ||||
| 	ReadBinary() (value []byte, err error) | ||||
|  | ||||
| 	Skip(fieldType TType) (err error) | ||||
| 	Flush() (err error) | ||||
|  | ||||
| 	Transport() TTransport | ||||
| } | ||||
|  | ||||
| // The maximum recursive depth the skip() function will traverse | ||||
| const DEFAULT_RECURSION_DEPTH = 64 | ||||
|  | ||||
| // Skips over the next data element from the provided input TProtocol object. | ||||
| func SkipDefaultDepth(prot TProtocol, typeId TType) (err error) { | ||||
| 	return Skip(prot, typeId, DEFAULT_RECURSION_DEPTH) | ||||
| } | ||||
|  | ||||
| // Skips over the next data element from the provided input TProtocol object. | ||||
| func Skip(self TProtocol, fieldType TType, maxDepth int) (err error) { | ||||
| 	 | ||||
|     if maxDepth <= 0 { | ||||
| 		return NewTProtocolExceptionWithType( DEPTH_LIMIT, errors.New("Depth limit exceeded")) | ||||
| 	} | ||||
|  | ||||
| 	switch fieldType { | ||||
| 	case STOP: | ||||
| 		return | ||||
| 	case BOOL: | ||||
| 		_, err = self.ReadBool() | ||||
| 		return | ||||
| 	case BYTE: | ||||
| 		_, err = self.ReadByte() | ||||
| 		return | ||||
| 	case I16: | ||||
| 		_, err = self.ReadI16() | ||||
| 		return | ||||
| 	case I32: | ||||
| 		_, err = self.ReadI32() | ||||
| 		return | ||||
| 	case I64: | ||||
| 		_, err = self.ReadI64() | ||||
| 		return | ||||
| 	case DOUBLE: | ||||
| 		_, err = self.ReadDouble() | ||||
| 		return | ||||
| 	case STRING: | ||||
| 		_, err = self.ReadString() | ||||
| 		return | ||||
| 	case STRUCT: | ||||
| 		if _, err = self.ReadStructBegin(); err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		for { | ||||
| 			_, typeId, _, _ := self.ReadFieldBegin() | ||||
| 			if typeId == STOP { | ||||
| 				break | ||||
| 			} | ||||
| 			err := Skip(self, typeId, maxDepth-1) | ||||
| 			if err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			self.ReadFieldEnd() | ||||
| 		} | ||||
| 		return self.ReadStructEnd() | ||||
| 	case MAP: | ||||
| 		keyType, valueType, size, err := self.ReadMapBegin() | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		for i := 0; i < size; i++ { | ||||
| 			err := Skip(self, keyType, maxDepth-1) | ||||
| 			if err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 			self.Skip(valueType) | ||||
| 		} | ||||
| 		return self.ReadMapEnd() | ||||
| 	case SET: | ||||
| 		elemType, size, err := self.ReadSetBegin() | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		for i := 0; i < size; i++ { | ||||
| 			err := Skip(self, elemType, maxDepth-1) | ||||
| 			if err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 		} | ||||
| 		return self.ReadSetEnd() | ||||
| 	case LIST: | ||||
| 		elemType, size, err := self.ReadListBegin() | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| 		} | ||||
| 		for i := 0; i < size; i++ { | ||||
| 			err := Skip(self, elemType, maxDepth-1) | ||||
| 			if err != nil { | ||||
| 				return err | ||||
| 			} | ||||
| 		} | ||||
| 		return self.ReadListEnd() | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
							
								
								
									
										78
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/protocol_exception.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										78
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/protocol_exception.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,78 @@ | ||||
| /* | ||||
|  * 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 | ||||
|  | ||||
| import ( | ||||
| 	"encoding/base64" | ||||
| ) | ||||
|  | ||||
| // Thrift Protocol exception | ||||
| type TProtocolException interface { | ||||
| 	TException | ||||
| 	TypeId() int | ||||
| } | ||||
|  | ||||
| const ( | ||||
| 	UNKNOWN_PROTOCOL_EXCEPTION = 0 | ||||
| 	INVALID_DATA               = 1 | ||||
| 	NEGATIVE_SIZE              = 2 | ||||
| 	SIZE_LIMIT                 = 3 | ||||
| 	BAD_VERSION                = 4 | ||||
| 	NOT_IMPLEMENTED            = 5 | ||||
| 	DEPTH_LIMIT                = 6 | ||||
| ) | ||||
|  | ||||
| type tProtocolException struct { | ||||
| 	typeId  int | ||||
| 	message string | ||||
| } | ||||
|  | ||||
| func (p *tProtocolException) TypeId() int { | ||||
| 	return p.typeId | ||||
| } | ||||
|  | ||||
| func (p *tProtocolException) String() string { | ||||
| 	return p.message | ||||
| } | ||||
|  | ||||
| func (p *tProtocolException) Error() string { | ||||
| 	return p.message | ||||
| } | ||||
|  | ||||
| func NewTProtocolException(err error) TProtocolException { | ||||
| 	if err == nil { | ||||
| 		return nil | ||||
| 	} | ||||
| 	if e,ok := err.(TProtocolException); ok { | ||||
| 		return e | ||||
| 	} | ||||
| 	if _, ok := err.(base64.CorruptInputError); ok { | ||||
| 		return &tProtocolException{INVALID_DATA, err.Error()} | ||||
| 	} | ||||
| 	return &tProtocolException{UNKNOWN_PROTOCOL_EXCEPTION, err.Error()} | ||||
| } | ||||
|  | ||||
| func NewTProtocolExceptionWithType(errType int, err error) TProtocolException { | ||||
| 	if err == nil { | ||||
| 		return nil | ||||
| 	} | ||||
| 	return &tProtocolException{errType, err.Error()} | ||||
| } | ||||
|  | ||||
							
								
								
									
										25
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/protocol_factory.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/protocol_factory.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| /* | ||||
|  * 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 | ||||
|  | ||||
| // Factory interface for constructing protocol instances. | ||||
| type TProtocolFactory interface { | ||||
| 	GetProtocol(trans TTransport) TProtocol | ||||
| } | ||||
							
								
								
									
										69
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/rich_transport.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/rich_transport.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,69 @@ | ||||
| /* | ||||
|  * 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 | ||||
|  | ||||
| import "io" | ||||
|  | ||||
| type RichTransport struct { | ||||
| 	TTransport | ||||
| } | ||||
|  | ||||
| // Wraps Transport to provide TRichTransport interface | ||||
| func NewTRichTransport(trans TTransport) *RichTransport { | ||||
| 	return &RichTransport{trans} | ||||
| } | ||||
|  | ||||
| func (r *RichTransport) ReadByte() (c byte, err error) { | ||||
| 	return readByte(r.TTransport) | ||||
| } | ||||
|  | ||||
| func (r *RichTransport) WriteByte(c byte) error { | ||||
| 	return writeByte(r.TTransport, c) | ||||
| } | ||||
|  | ||||
| func (r *RichTransport) WriteString(s string) (n int, err error) { | ||||
| 	return r.Write([]byte(s)) | ||||
| } | ||||
|  | ||||
| func (r *RichTransport) RemainingBytes() (num_bytes uint64) { | ||||
| 	return r.TTransport.RemainingBytes() | ||||
| } | ||||
|  | ||||
| func readByte(r io.Reader) (c byte, err error) { | ||||
| 	v := [1]byte{0} | ||||
| 	n, err := r.Read(v[0:1]) | ||||
| 	if n > 0 && (err == nil || err == io.EOF) { | ||||
| 		return v[0], nil | ||||
| 	} | ||||
| 	if n > 0 && err != nil { | ||||
| 		return v[0], err | ||||
| 	} | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 	return v[0], nil | ||||
| } | ||||
|  | ||||
| func writeByte(w io.Writer, c byte) error { | ||||
| 	v := [1]byte{c} | ||||
| 	_, err := w.Write(v[0:1]) | ||||
| 	return err | ||||
| } | ||||
|  | ||||
							
								
								
									
										75
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/serializer.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/serializer.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,75 @@ | ||||
| /* | ||||
|  * 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 | ||||
|  | ||||
| type TSerializer struct { | ||||
| 	Transport *TMemoryBuffer | ||||
| 	Protocol  TProtocol | ||||
| } | ||||
|  | ||||
| type TStruct interface { | ||||
| 	Write(p TProtocol) error | ||||
| 	Read(p TProtocol) error | ||||
| } | ||||
|  | ||||
| func NewTSerializer() *TSerializer { | ||||
| 	transport := NewTMemoryBufferLen(1024) | ||||
| 	protocol := NewTBinaryProtocolFactoryDefault().GetProtocol(transport) | ||||
|  | ||||
| 	return &TSerializer{ | ||||
| 		transport, | ||||
| 		protocol} | ||||
| } | ||||
|  | ||||
| func (t *TSerializer) WriteString(msg TStruct) (s string, err error) { | ||||
| 	t.Transport.Reset() | ||||
|  | ||||
| 	if err = msg.Write(t.Protocol); err != nil { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	if err = t.Protocol.Flush(); err != nil { | ||||
| 		return | ||||
| 	} | ||||
| 	if err = t.Transport.Flush(); err != nil { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	return t.Transport.String(), nil | ||||
| } | ||||
|  | ||||
| func (t *TSerializer) Write(msg TStruct) (b []byte, err error) { | ||||
| 	t.Transport.Reset() | ||||
|  | ||||
| 	if err = msg.Write(t.Protocol); err != nil { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	if err = t.Protocol.Flush(); err != nil { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	if err = t.Transport.Flush(); err != nil { | ||||
| 		return | ||||
| 	} | ||||
|  | ||||
| 	b = append(b, t.Transport.Bytes()...) | ||||
| 	return | ||||
| } | ||||
							
								
								
									
										1337
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/simple_json_protocol.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1337
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/simple_json_protocol.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										68
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/transport.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/transport.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | ||||
| /* | ||||
|  * 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 | ||||
|  | ||||
| import ( | ||||
| 	"errors" | ||||
| 	"io" | ||||
| ) | ||||
|  | ||||
| var errTransportInterrupted = errors.New("Transport Interrupted") | ||||
|  | ||||
| type Flusher interface { | ||||
| 	Flush() (err error) | ||||
| } | ||||
|  | ||||
| type ReadSizeProvider interface { | ||||
| 	RemainingBytes() (num_bytes uint64) | ||||
| } | ||||
|  | ||||
|  | ||||
| // Encapsulates the I/O layer | ||||
| type TTransport interface { | ||||
| 	io.ReadWriteCloser | ||||
| 	Flusher | ||||
| 	ReadSizeProvider | ||||
|  | ||||
| 	// Opens the transport for communication | ||||
| 	Open() error | ||||
|  | ||||
| 	// Returns true if the transport is open | ||||
| 	IsOpen() bool | ||||
| } | ||||
|  | ||||
| type stringWriter interface { | ||||
| 	WriteString(s string) (n int, err error) | ||||
| } | ||||
|  | ||||
|  | ||||
| // This is "enchanced" transport with extra capabilities. You need to use one of these | ||||
| // to construct protocol. | ||||
| // Notably, TSocket does not implement this interface, and it is always a mistake to use | ||||
| // TSocket directly in protocol. | ||||
| type TRichTransport interface { | ||||
| 	io.ReadWriter | ||||
| 	io.ByteReader | ||||
| 	io.ByteWriter | ||||
| 	stringWriter | ||||
| 	Flusher | ||||
| 	ReadSizeProvider | ||||
| } | ||||
|  | ||||
							
								
								
									
										90
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/transport_exception.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/transport_exception.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,90 @@ | ||||
| /* | ||||
|  * 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 | ||||
|  | ||||
| import ( | ||||
| 	"errors" | ||||
| 	"io" | ||||
| ) | ||||
|  | ||||
| type timeoutable interface { | ||||
| 	Timeout() bool | ||||
| } | ||||
|  | ||||
| // Thrift Transport exception | ||||
| type TTransportException interface { | ||||
| 	TException | ||||
| 	TypeId() int | ||||
| 	Err() error | ||||
| } | ||||
|  | ||||
| const ( | ||||
| 	UNKNOWN_TRANSPORT_EXCEPTION = 0 | ||||
| 	NOT_OPEN                    = 1 | ||||
| 	ALREADY_OPEN                = 2 | ||||
| 	TIMED_OUT                   = 3 | ||||
| 	END_OF_FILE                 = 4 | ||||
| ) | ||||
|  | ||||
| type tTransportException struct { | ||||
| 	typeId int | ||||
| 	err    error | ||||
| } | ||||
|  | ||||
| func (p *tTransportException) TypeId() int { | ||||
| 	return p.typeId | ||||
| } | ||||
|  | ||||
| func (p *tTransportException) Error() string { | ||||
| 	return p.err.Error() | ||||
| } | ||||
|  | ||||
| func (p *tTransportException) Err() error { | ||||
| 	return p.err | ||||
| } | ||||
|  | ||||
| func NewTTransportException(t int, e string) TTransportException { | ||||
| 	return &tTransportException{typeId: t, err: errors.New(e)} | ||||
| } | ||||
|  | ||||
| func NewTTransportExceptionFromError(e error) TTransportException { | ||||
| 	if e == nil { | ||||
| 		return nil | ||||
| 	} | ||||
|  | ||||
| 	if t, ok := e.(TTransportException); ok { | ||||
| 		return t | ||||
| 	} | ||||
|  | ||||
| 	switch v := e.(type) { | ||||
| 	case TTransportException: | ||||
| 		return v | ||||
| 	case timeoutable: | ||||
| 		if v.Timeout() { | ||||
| 			return &tTransportException{typeId: TIMED_OUT, err: e} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if e == io.EOF { | ||||
| 		return &tTransportException{typeId: END_OF_FILE, err: e} | ||||
| 	} | ||||
|  | ||||
| 	return &tTransportException{typeId: UNKNOWN_TRANSPORT_EXCEPTION, err: e} | ||||
| } | ||||
							
								
								
									
										39
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/transport_factory.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/transport_factory.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| /* | ||||
|  * 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 | ||||
|  | ||||
| // Factory class used to create wrapped instance of Transports. | ||||
| // This is used primarily in servers, which get Transports from | ||||
| // a ServerTransport and then may want to mutate them (i.e. create | ||||
| // a BufferedTransport from the underlying base transport) | ||||
| type TTransportFactory interface { | ||||
| 	GetTransport(trans TTransport) TTransport | ||||
| } | ||||
|  | ||||
| type tTransportFactory struct{} | ||||
|  | ||||
| // Return a wrapped instance of the base Transport. | ||||
| func (p *tTransportFactory) GetTransport(trans TTransport) TTransport { | ||||
| 	return trans | ||||
| } | ||||
|  | ||||
| func NewTTransportFactory() TTransportFactory { | ||||
| 	return &tTransportFactory{} | ||||
| } | ||||
							
								
								
									
										69
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/type.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								vendor/github.com/uber/jaeger-client-go/thrift/type.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,69 @@ | ||||
| /* | ||||
|  * 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 | ||||
|  | ||||
| // Type constants in the Thrift protocol | ||||
| type TType byte | ||||
|  | ||||
| const ( | ||||
| 	STOP   = 0 | ||||
| 	VOID   = 1 | ||||
| 	BOOL   = 2 | ||||
| 	BYTE   = 3 | ||||
| 	I08    = 3 | ||||
| 	DOUBLE = 4 | ||||
| 	I16    = 6 | ||||
| 	I32    = 8 | ||||
| 	I64    = 10 | ||||
| 	STRING = 11 | ||||
| 	UTF7   = 11 | ||||
| 	STRUCT = 12 | ||||
| 	MAP    = 13 | ||||
| 	SET    = 14 | ||||
| 	LIST   = 15 | ||||
| 	UTF8   = 16 | ||||
| 	UTF16  = 17 | ||||
| 	//BINARY = 18   wrong and unusued | ||||
| ) | ||||
|  | ||||
| var typeNames = map[int]string{ | ||||
| 	STOP:   "STOP", | ||||
| 	VOID:   "VOID", | ||||
| 	BOOL:   "BOOL", | ||||
| 	BYTE:   "BYTE", | ||||
| 	DOUBLE: "DOUBLE", | ||||
| 	I16:    "I16", | ||||
| 	I32:    "I32", | ||||
| 	I64:    "I64", | ||||
| 	STRING: "STRING", | ||||
| 	STRUCT: "STRUCT", | ||||
| 	MAP:    "MAP", | ||||
| 	SET:    "SET", | ||||
| 	LIST:   "LIST", | ||||
| 	UTF8:   "UTF8", | ||||
| 	UTF16:  "UTF16", | ||||
| } | ||||
|  | ||||
| func (p TType) String() string { | ||||
| 	if s, ok := typeNames[int(p)]; ok { | ||||
| 		return s | ||||
| 	} | ||||
| 	return "Unknown" | ||||
| } | ||||
		Reference in New Issue
	
	Block a user