use std::collections::HashMap;
use std::sync::atomic::Ordering;
use rocketmq_protocol::protocol::RemotingSerializable;
use serde::Deserialize;
use serde::Serialize;
use tracing::warn;
use crate::consumer::store::offset_serialize_wrapper::OffsetSerializeWrapper;
#[derive(Serialize, Deserialize, Debug, Default)]
#[serde(rename_all = "camelCase")]
pub struct OffsetSerialize {
pub offset_table: HashMap<String, i64>,
}
impl From<OffsetSerializeWrapper> for OffsetSerialize {
fn from(wrapper: OffsetSerializeWrapper) -> Self {
let mut offset_table = HashMap::new();
for (k, v) in wrapper.offset_table {
match k.serialize_json() {
Ok(result) => {
offset_table.insert(result, v.load(Ordering::Relaxed));
}
Err(err) => {
warn!("skip offset entry because message queue serialization failed: {err}");
}
}
}
OffsetSerialize { offset_table }
}
}