use serde::Deserialize;
use serde::Serialize;
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct OffsetWrapper {
broker_offset: i64,
consumer_offset: i64,
pull_offset: i64,
last_timestamp: i64,
}
impl OffsetWrapper {
pub fn new() -> Self {
Self {
broker_offset: 0,
consumer_offset: 0,
pull_offset: 0,
last_timestamp: 0,
}
}
pub fn get_broker_offset(&self) -> i64 {
self.broker_offset
}
pub fn set_broker_offset(&mut self, broker_offset: i64) {
self.broker_offset = broker_offset;
}
pub fn get_consumer_offset(&self) -> i64 {
self.consumer_offset
}
pub fn set_consumer_offset(&mut self, consumer_offset: i64) {
self.consumer_offset = consumer_offset;
}
pub fn get_pull_offset(&self) -> i64 {
self.pull_offset
}
pub fn set_pull_offset(&mut self, pull_offset: i64) {
self.pull_offset = pull_offset;
}
pub fn get_last_timestamp(&self) -> i64 {
self.last_timestamp
}
pub fn set_last_timestamp(&mut self, last_timestamp: i64) {
self.last_timestamp = last_timestamp;
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn methods_and_serde_preserve_offsets() {
let mut wrapper = OffsetWrapper::new();
assert_eq!(
(
wrapper.get_broker_offset(),
wrapper.get_consumer_offset(),
wrapper.get_pull_offset(),
wrapper.get_last_timestamp(),
),
(0, 0, 0, 0)
);
wrapper.set_broker_offset(-100);
wrapper.set_consumer_offset(-200);
wrapper.set_pull_offset(-300);
wrapper.set_last_timestamp(-400);
let serialized = serde_json::to_string(&wrapper).unwrap();
let expected = r#"{"brokerOffset":-100,"consumerOffset":-200,"pullOffset":-300,"lastTimestamp":-400}"#;
assert_eq!(serialized, expected);
let deserialized: OffsetWrapper = serde_json::from_str(&serialized).unwrap();
assert_eq!(
(
deserialized.get_broker_offset(),
deserialized.get_consumer_offset(),
deserialized.get_pull_offset(),
deserialized.get_last_timestamp(),
),
(-100, -200, -300, -400)
);
}
}