import abc

class ABCRecord(metaclass=abc.ABCMeta):
    @property
    @abc.abstractmethod
    def size_in_bytes(self): ...
    @property
    @abc.abstractmethod
    def offset(self): ...
    @property
    @abc.abstractmethod
    def timestamp(self): ...
    @property
    @abc.abstractmethod
    def timestamp_type(self): ...
    @property
    @abc.abstractmethod
    def key(self): ...
    @property
    @abc.abstractmethod
    def value(self): ...
    @property
    @abc.abstractmethod
    def checksum(self): ...
    @abc.abstractmethod
    def validate_crc(self): ...
    @property
    @abc.abstractmethod
    def headers(self): ...

class ABCRecordBatchBuilder(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def append(self, offset, timestamp, key, value, headers=None): ...
    @abc.abstractmethod
    def size_in_bytes(self, offset, timestamp, key, value, headers): ...
    @abc.abstractmethod
    def build(self): ...

class ABCRecordBatch(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def __iter__(self): ...
    @property
    @abc.abstractmethod
    def base_offset(self): ...
    @property
    @abc.abstractmethod
    def size_in_bytes(self): ...
    @property
    @abc.abstractmethod
    def magic(self): ...

class ABCRecords(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def __init__(self, buffer): ...
    @abc.abstractmethod
    def size_in_bytes(self): ...
    @abc.abstractmethod
    def next_batch(self): ...
    @abc.abstractmethod
    def has_next(self): ...
