durak/src/message.rs
2025-03-03 15:31:22 +01:00

49 lines
1.1 KiB
Rust

use std::fmt::Display;
use axum::body::to_bytes;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Message {
pub from: String,
pub message_kind: MessageKind,
pub content: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum MessageKind {
Test,
Move,
CreatePlayer,
CreateLobby,
}
impl Message {
pub fn new(from: &str, message_kind: MessageKind, content: impl Into<String>) -> anyhow::Result<Self> {
let from = from.into();
let content = content.into();
Ok(Self {
from,
message_kind,
content,
})
}
pub fn encode(&self) -> anyhow::Result<String> {
let message_json: String = serde_json::to_string(self)?;
Ok(message_json)
}
pub fn decode(buffer: &[u8]) -> anyhow::Result<Self> {
let message: Message = serde_json::from_slice(buffer)?;
Ok(message)
}
}
impl Display for Message {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
todo!()
}
}