Isabelle's Lazy Message Protocol
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

42 řádky
1.1 KiB

  1. use crate::{Packet, Result};
  2. use chrono::prelude::*;
  3. use serde::{Deserialize, Serialize};
  4. use uuid::Uuid;
  5. /// a standard message from a user
  6. #[derive(Debug, Clone, Serialize, Deserialize)]
  7. pub struct Message {
  8. pub timestamp: i64,
  9. pub message_id: u128,
  10. pub username: String,
  11. pub contents: String,
  12. }
  13. impl Message {
  14. /// create a new message
  15. pub fn new(username: String, contents: String) -> Message {
  16. let timestamp = Utc::now().timestamp();
  17. let message_id = Uuid::new_v4().as_u128();
  18. Message { username, message_id, timestamp, contents }
  19. }
  20. }
  21. impl crate::Sendable for Message {
  22. fn to_packet(&self, encrypt_flag: crate::EncryptFlag) -> Result<Packet> {
  23. let contents: Vec<u8> = serde_json::to_string(&self)?.into_bytes();
  24. let kind = 0xfc;
  25. Ok(Packet::new(kind, contents, encrypt_flag))
  26. }
  27. fn from_packet(packet: Packet) -> Result<Self> {
  28. let contents = &String::from_utf8(packet.contents)?;
  29. let message: Message = serde_json::from_str(contents)?;
  30. Ok(message)
  31. }
  32. fn packet_kind(&self) -> u8 {
  33. 0xfc
  34. }
  35. }