pub use cloacina_api_types::delivery::{
ClientMessage, EnvelopeError, ServerMessage, DELIVERY_PROTOCOL_VERSION,
};
use crate::models::delivery_outbox::DeliveryOutbox;
pub fn push_from_row(row: &DeliveryOutbox) -> ServerMessage {
ServerMessage::push(
row.id,
&row.kind,
&row.recipient,
row.tenant_id.clone(),
&row.payload,
)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::database::universal_types::UniversalTimestamp;
#[test]
fn push_from_row_round_trips_payload() {
let row = DeliveryOutbox {
id: 7,
recipient: "agent:abc".to_string(),
kind: "work".to_string(),
tenant_id: Some("t1".to_string()),
payload: b"\x00\xffhello".to_vec(),
delivery_state: "pending".to_string(),
delivery_attempts: 0,
created_at: UniversalTimestamp::now(),
delivered_at: None,
acked_at: None,
};
let msg = push_from_row(&row);
let json = serde_json::to_string(&msg).unwrap();
assert!(json.contains("\"type\":\"push\""));
let back: ServerMessage = serde_json::from_str(&json).unwrap();
assert_eq!(back.decode_push_payload().unwrap(), row.payload);
}
}