use bytes::Bytes;
use crate::consumer::TimestampType;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ShareConsumerRecord {
pub topic: String,
pub partition: i32,
pub offset: i64,
pub timestamp: i64,
pub timestamp_type: TimestampType,
pub key: Option<Bytes>,
pub value: Option<Bytes>,
pub headers: Vec<(String, Option<Bytes>)>,
pub delivery_count: i16,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub enum ShareAckMode {
#[default]
Implicit,
Explicit,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub enum ShareAcquireMode {
#[default]
BatchOptimized,
RecordLimit,
}
impl ShareAcquireMode {
pub(crate) fn wire(self) -> i8 {
match self {
ShareAcquireMode::BatchOptimized => 0,
ShareAcquireMode::RecordLimit => 1,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ShareAckType {
Accept,
Release,
Reject,
}
impl ShareAckType {
pub(crate) fn wire(self) -> i8 {
match self {
ShareAckType::Accept => 1,
ShareAckType::Release => 2,
ShareAckType::Reject => 3,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn ack_wire_codes() {
for (_name, ack, expected) in [
("accept", ShareAckType::Accept, 1),
("release", ShareAckType::Release, 2),
("reject", ShareAckType::Reject, 3),
] {
assert2::assert!(ack.wire() == expected);
}
}
#[test]
fn ack_mode_default_is_implicit() {
assert2::assert!(ShareAckMode::default() == ShareAckMode::Implicit);
}
#[test]
fn acquire_mode_default_is_batch_optimized() {
assert2::assert!(ShareAcquireMode::default() == ShareAcquireMode::BatchOptimized);
}
#[test]
fn acquire_mode_wire_codes_match_kafka() {
for (mode, expected) in [
(ShareAcquireMode::BatchOptimized, 0),
(ShareAcquireMode::RecordLimit, 1),
] {
assert2::assert!(mode.wire() == expected);
}
}
}