1pub mod event;
27pub mod single;
28pub mod element;
29pub mod channel;
30pub mod send;
31pub mod receive;
32
33use crate::error::Result;
34
35pub use channel::MessageChannel;
36pub use single::SingleMessage;
37pub use event::EventPacket;
38pub use element::{Group, GroupMember, FriendMember};
39
40pub type MessageChain = Vec<SingleMessage>;
41pub type MessageID = i64;
42pub type TimeStamp = u64;
43
44#[derive(Debug, Clone)]
45pub struct Message {
46 pub quote: Option<MessageID>,
47 pub message_chain: Vec<SingleMessage>,
48}
49
50impl Message {
51 pub fn new(quote: Option<MessageID>, message_chain: &Vec<SingleMessage>) -> Message {
52 Message {
53 quote,
54 message_chain: message_chain.to_vec(),
55 }
56 }
57}
58
59impl From<MessageBuilder> for Message {
60 fn from(builder: MessageBuilder) -> Self {
61 builder.build().unwrap()
62 }
63}
64
65#[derive(Debug, Clone)]
66pub struct MessageBuilder {
67 quote: Option<MessageID>,
68 message_chain: Vec<SingleMessage>,
69}
70
71impl MessageBuilder {
79 pub fn new() -> MessageBuilder {
80 MessageBuilder {
81 quote: None,
82 message_chain: Vec::new(),
83 }
84 }
85
86 pub fn append_message(mut self, msg: SingleMessage) -> MessageBuilder {
87 self.message_chain.push(msg);
88 self
89 }
90
91 pub fn quote(mut self, quote: MessageID) -> MessageBuilder {
92 self.quote = Some(quote);
93 self
94 }
95
96 pub fn build(self) -> Result<Message> {
97 Ok(Message {
98 quote: self.quote,
99 message_chain: self.message_chain,
100 })
101 }
102}