Add base api type classes w/ encoders in kafka.protocol.types

This commit is contained in:
Dana Powers
2015-11-23 04:15:19 +08:00
committed by Zack Dever
parent f0cd6d4082
commit f6edeafac3

55
kafka/protocol/types.py Normal file
View File

@@ -0,0 +1,55 @@
from struct import pack
class AbstractField(object):
def __init__(self, name):
self.name = name
class Int8(AbstractField):
@classmethod
def encode(cls, value):
return pack('>b', value)
class Int16(AbstractField):
@classmethod
def encode(cls, value):
return pack('>h', value)
class Int32(AbstractField):
@classmethod
def encode(cls, value):
return pack('>i', value)
class Int64(AbstractField):
@classmethod
def encode(cls, value):
return pack('>q', value)
class String(AbstractField):
@classmethod
def encode(cls, value):
if value is None:
return Int16.encode(-1)
else:
return Int16.encode(len(value)) + value
class Bytes(AbstractField):
@classmethod
def encode(cls, value):
if value is None:
return Int32.encode(-1)
else:
return Int32.encode(len(value)) + value
class Array(object):
@classmethod
def encode(cls, values):
# Assume that values are already encoded
return Int32.encode(len(values)) + b''.join(values)