use std::collections::HashMap;
use serde::{Deserialize, Serialize};
#[derive(
Debug, Clone, Serialize, Deserialize, zerompk::ToMessagePack, zerompk::FromMessagePack,
)]
pub struct HandshakeMsg {
pub jwt_token: String,
pub vector_clock: HashMap<String, HashMap<String, u64>>,
pub subscribed_shapes: Vec<String>,
pub client_version: String,
#[serde(default)]
pub lite_id: String,
#[serde(default)]
pub epoch: u64,
#[serde(default)]
pub wire_version: u16,
}
#[derive(
Debug, Clone, Serialize, Deserialize, zerompk::ToMessagePack, zerompk::FromMessagePack,
)]
pub struct HandshakeAckMsg {
pub success: bool,
pub session_id: String,
pub server_clock: HashMap<String, u64>,
pub error: Option<String>,
#[serde(default)]
pub fork_detected: bool,
#[serde(default)]
pub server_wire_version: u16,
#[serde(default)]
pub producer_id: u64,
#[serde(default)]
pub accepted_epoch: u64,
#[serde(default)]
pub delta_signing_key: [u8; 32],
}
#[derive(
Debug, Clone, Serialize, Deserialize, zerompk::ToMessagePack, zerompk::FromMessagePack,
)]
pub struct TokenRefreshMsg {
pub new_token: String,
}
#[derive(
Debug, Clone, Serialize, Deserialize, zerompk::ToMessagePack, zerompk::FromMessagePack,
)]
pub struct TokenRefreshAckMsg {
pub success: bool,
pub error: Option<String>,
#[serde(default)]
pub expires_in_secs: u64,
}
#[derive(
Debug, Clone, Serialize, Deserialize, zerompk::ToMessagePack, zerompk::FromMessagePack,
)]
pub struct PingPongMsg {
pub timestamp_ms: u64,
pub is_pong: bool,
}
#[cfg(test)]
mod tests {
use super::*;
use crate::sync::wire::{SyncFrame, SyncMessageType};
#[test]
fn handshake_serialization() {
let msg = HandshakeMsg {
jwt_token: "test.jwt.token".into(),
vector_clock: HashMap::new(),
subscribed_shapes: vec!["shape1".into()],
client_version: "0.1.0".into(),
lite_id: String::new(),
epoch: 0,
wire_version: 1,
};
let frame = SyncFrame::new_msgpack(SyncMessageType::Handshake, &msg).unwrap();
let bytes = frame.to_bytes();
assert!(bytes.len() > SyncFrame::HEADER_SIZE);
assert_eq!(bytes[0], SyncFrame::FORMAT_VERSION);
assert_eq!(bytes[1], 0x01);
}
}