shitty message client
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.

37 linhas
1.0 KiB

  1. // namespacing
  2. use crate::packet::{Packet, PacketType};
  3. use crate::Result;
  4. use chrono::prelude::*;
  5. use serde::{Deserialize, Serialize};
  6. /// a Message
  7. #[derive(Deserialize, Serialize, Debug, Clone)]
  8. pub struct Message {
  9. user: String,
  10. contents: String,
  11. timestamp: i64,
  12. }
  13. impl Message {
  14. /// create a new message
  15. pub fn new(user: String, contents: String) -> Self {
  16. let timestamp = Utc::now().timestamp();
  17. Self { user, contents, timestamp }
  18. }
  19. }
  20. impl crate::packet::Sendable for Message {
  21. fn to_packet(self) -> Result<Packet> {
  22. let packet_contents: Vec<u8> = serde_json::to_string(&self)?.into_bytes();
  23. let packet_type = PacketType::Message;
  24. Ok(Packet { packet_type, packet_contents })
  25. }
  26. fn from_packet(packet: Packet) -> Result<Self> {
  27. let packet_contents =
  28. &String::from_utf8(packet.packet_contents).expect("could not decode as utf8");
  29. let message: Message = serde_json::from_str(packet_contents)?;
  30. Ok(message)
  31. }
  32. }