use bytes::{Buf, BufMut};
use crate::{
Decode, Encode, ProtocolError, UnknownTaggedFields,
krabka::common::{
I32_LEN, I64_LEN, array_len, decode_array, encode_array, read_unknown_tagged_fields,
unknown_tagged_fields_len, write_unknown_tagged_fields,
},
primitives::{
fixed::{get_i32, get_i64, put_i32, put_i64},
string_bytes::{compact_string_len, get_compact_string_owned, put_compact_string},
},
};
pub const CUT_STATUS_COMPLETE: i8 = 0;
pub const CUT_STATUS_PARTIAL: i8 = 1;
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub struct BarrierCutPartition {
pub partition: i32,
pub offset: i64,
pub unknown_tagged_fields: UnknownTaggedFields,
}
impl Encode for BarrierCutPartition {
fn encode<B: BufMut>(&self, buf: &mut B, _version: i16) -> Result<(), ProtocolError> {
put_i32(buf, self.partition);
put_i64(buf, self.offset);
write_unknown_tagged_fields(buf, &self.unknown_tagged_fields);
Ok(())
}
fn encoded_len(&self, _version: i16) -> usize {
I32_LEN + I64_LEN + unknown_tagged_fields_len(&self.unknown_tagged_fields)
}
}
impl Decode<'_> for BarrierCutPartition {
fn decode<B: Buf>(buf: &mut B, _version: i16) -> Result<Self, ProtocolError> {
Ok(Self {
partition: get_i32(buf)?,
offset: get_i64(buf)?,
unknown_tagged_fields: read_unknown_tagged_fields(buf)?,
})
}
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub struct BarrierCutTopic {
pub topic: String,
pub partitions: Vec<BarrierCutPartition>,
pub unknown_tagged_fields: UnknownTaggedFields,
}
impl Encode for BarrierCutTopic {
fn encode<B: BufMut>(&self, buf: &mut B, version: i16) -> Result<(), ProtocolError> {
put_compact_string(buf, &self.topic);
encode_array(buf, &self.partitions, version)?;
write_unknown_tagged_fields(buf, &self.unknown_tagged_fields);
Ok(())
}
fn encoded_len(&self, version: i16) -> usize {
compact_string_len(&self.topic)
+ array_len(&self.partitions, version)
+ unknown_tagged_fields_len(&self.unknown_tagged_fields)
}
}
impl Decode<'_> for BarrierCutTopic {
fn decode<B: Buf>(buf: &mut B, version: i16) -> Result<Self, ProtocolError> {
Ok(Self {
topic: get_compact_string_owned(buf)?,
partitions: decode_array(buf, version)?,
unknown_tagged_fields: read_unknown_tagged_fields(buf)?,
})
}
}
#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub struct BarrierMissingPartition {
pub topic: String,
pub partition: i32,
pub unknown_tagged_fields: UnknownTaggedFields,
}
impl Encode for BarrierMissingPartition {
fn encode<B: BufMut>(&self, buf: &mut B, _version: i16) -> Result<(), ProtocolError> {
put_compact_string(buf, &self.topic);
put_i32(buf, self.partition);
write_unknown_tagged_fields(buf, &self.unknown_tagged_fields);
Ok(())
}
fn encoded_len(&self, _version: i16) -> usize {
compact_string_len(&self.topic)
+ I32_LEN
+ unknown_tagged_fields_len(&self.unknown_tagged_fields)
}
}
impl Decode<'_> for BarrierMissingPartition {
fn decode<B: Buf>(buf: &mut B, _version: i16) -> Result<Self, ProtocolError> {
Ok(Self {
topic: get_compact_string_owned(buf)?,
partition: get_i32(buf)?,
unknown_tagged_fields: read_unknown_tagged_fields(buf)?,
})
}
}