use crate::error::*;
use pravega_client_shared::Segment;
use serde::{Deserialize, Serialize};
use serde_cbor::from_slice;
use serde_cbor::to_vec;
use snafu::ResultExt;
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
pub(crate) enum EventPointerVersioned {
V1(EventPointerV1),
}
impl EventPointerVersioned {
fn to_bytes(&self) -> Result<Vec<u8>, SerdeError> {
let encoded = to_vec(&self).context(Cbor {
msg: "serialize EventPointerVersioned".to_owned(),
})?;
Ok(encoded)
}
fn from_bytes(input: &[u8]) -> Result<EventPointerVersioned, SerdeError> {
let decoded: EventPointerVersioned = from_slice(&input[..]).context(Cbor {
msg: "deserialize EventPointerVersioned".to_owned(),
})?;
Ok(decoded)
}
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
pub(crate) struct EventPointerV1 {
segment: Segment,
event_start_offset: i64,
event_length: i32,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_event_pointer_serde() {
let v1 = EventPointerV1 {
segment: Segment {
number: 0,
tx_id: None,
},
event_start_offset: 0,
event_length: 0,
};
let event_pointer = EventPointerVersioned::V1(v1.clone());
let encoded = event_pointer.to_bytes().expect("encode to byte array");
let decoded = EventPointerVersioned::from_bytes(&encoded).expect("decode from byte array");
assert_eq!(EventPointerVersioned::V1(v1), decoded);
}
}