zulip-api 0.0.8

Client library for interacting with the Zulip API
Documentation
use serde::{Deserialize, Serialize};

use crate::{field_access, impl_default, impl_display};

use super::MessageType;

/// Represents a message returned by the Zulip API server.
#[derive(Clone, Debug, Eq, PartialEq, Deserialize, Serialize)]
pub struct Submessage {
    msg_type: MessageType,
    content: String,
    message_id: u64,
    sender_id: u64,
    id: u64,
}

impl Submessage {
    /// Creates a new [Submessage].
    pub const fn new() -> Self {
        Self {
            msg_type: MessageType::new(),
            content: String::new(),
            message_id: 0,
            sender_id: 0,
            id: 0,
        }
    }
}

field_access! {
    Submessage {
        msg_type: MessageType,
        message_id: u64,
        sender_id: u64,
        id: u64,
    }
}

field_access! {
    Submessage {
        content: cow { str },
    }
}

impl_default!(Submessage);
impl_display!(Submessage);

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_sub_message() {
        let msg_type = MessageType::Channel;
        let content = "content";
        let message_id = 1;
        let sender_id = 2;
        let id = 3;

        let sub = Submessage::new()
            .with_msg_type(msg_type)
            .with_content(content)
            .with_message_id(message_id)
            .with_sender_id(sender_id)
            .with_id(id);

        let sub_json = sub.to_string();

        assert_eq!(sub.msg_type(), msg_type);
        assert_eq!(sub.content(), content);
        assert_eq!(sub.message_id(), message_id);
        assert_eq!(sub.sender_id(), sender_id);
        assert_eq!(sub.id(), id);

        assert_eq!(serde_json::to_string(&sub).unwrap(), sub_json);
        assert_eq!(serde_json::from_str::<Submessage>(&sub_json).unwrap(), sub);
    }
}