Isabelle's Lazy Message Protocol
Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

47 linhas
1.2 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 {
  19. username,
  20. message_id,
  21. timestamp,
  22. contents,
  23. }
  24. }
  25. }
  26. impl crate::Sendable for Message {
  27. fn to_packet(&self, encrypt_kind: crate::EncryptKind) -> Result<Packet> {
  28. let contents: Vec<u8> = serde_json::to_string(&self)?.into_bytes();
  29. let kind = 0x00;
  30. Ok(Packet::new(kind, contents, encrypt_kind))
  31. }
  32. fn from_packet(packet: Packet) -> Result<Self> {
  33. let contents = &String::from_utf8(packet.contents)?;
  34. let message: Message = serde_json::from_str(contents)?;
  35. Ok(message)
  36. }
  37. fn packet_kind(&self) -> u8 {
  38. 0x00
  39. }
  40. }