runecast_protocol/
lib.rs

1//! `RuneCast` Protocol Library
2//!
3//! This crate defines the WebSocket protocol for `RuneCast`, including:
4//!
5//! - Message envelopes with sequence numbers for reliable delivery
6//! - Client-to-server message types
7//! - Server-to-client message types
8//! - Shared data types (`Grid`, `Position`, `PlayerInfo`, etc.)
9//! - Player identity and context types
10//! - Compatibility layer for gradual migration
11//!
12//! # Usage
13//!
14//! ```rust
15//! use runecast_protocol::protocol::{ClientMessage, ServerMessage, Envelope};
16//!
17//! // Parse an incoming client message
18//! let json = r#"{"type":"heartbeat"}"#;
19//! let msg: ClientMessage = serde_json::from_str(json).unwrap();
20//!
21//! // Create a server response
22//! let response = ServerMessage::HeartbeatAck {
23//!     server_time: 1701234567890,
24//! };
25//!
26//! // Optionally wrap in envelope for reliable delivery
27//! let envelope = Envelope::new(42, response);
28//! ```
29
30pub mod player;
31pub mod protocol;
32
33// Re-export commonly used items at crate root for convenience
34pub use player::{PlayerContext, PlayerIdentity};
35pub use protocol::compat::{
36    legacy_game_state_to_snapshot, parse_client_message, serialize_server_message,
37    snapshot_to_legacy_game_state,
38};
39pub use protocol::{
40    client_messages::ClientMessage,
41    envelope::{Envelope, MaybeEnveloped},
42    server_messages::ServerMessage,
43    types::{
44        AdminGameInfo, DebugBackendGameState, DebugHandlerGameState, DebugLobbyState,
45        DebugPlayerInfo, DebugWebsocketContext, ErrorCode, GameChange, GameConfig, GamePlayerInfo,
46        GameSnapshot, GameState, GameSummary, Grid, GridCell, LobbyChange, LobbyGameInfo,
47        LobbyGamePlayerInfo, LobbyPlayerInfo, LobbyType, Multiplier, PlayerInfo, Position,
48        ScoreInfo, SpectatorInfo, TimerVoteState,
49    },
50    LobbySnapshot,
51};