windjammer_ui/components/generated/
chatmessage.rs

1#![allow(clippy::all)]
2#![allow(noop_method_call)]
3use super::traits::Renderable;
4
5#[derive(Clone, Debug, PartialEq, Copy)]
6pub enum MessageRole {
7    User,
8    Assistant,
9    System,
10}
11
12#[derive(Debug, Clone, PartialEq)]
13pub struct ChatMessage {
14    pub role: MessageRole,
15    pub content: String,
16    pub avatar: String,
17    pub timestamp: String,
18}
19
20impl ChatMessage {
21    #[inline]
22    pub fn new(content: String) -> ChatMessage {
23        ChatMessage {
24            role: MessageRole::User,
25            content,
26            avatar: String::from(""),
27            timestamp: String::from(""),
28        }
29    }
30    #[inline]
31    pub fn role(mut self, role: MessageRole) -> ChatMessage {
32        self.role = role;
33        self
34    }
35    #[inline]
36    pub fn avatar(mut self, avatar: String) -> ChatMessage {
37        self.avatar = avatar;
38        self
39    }
40    #[inline]
41    pub fn timestamp(mut self, timestamp: String) -> ChatMessage {
42        self.timestamp = timestamp;
43        self
44    }
45}
46
47impl Renderable for ChatMessage {
48    #[inline]
49    fn render(self) -> String {
50        let role_class = match self.role {
51            MessageRole::User => "wj-message-user".to_string(),
52            MessageRole::Assistant => "wj-message-assistant".to_string(),
53            MessageRole::System => "wj-message-system".to_string(),
54        };
55        let avatar_html = {
56            if self.avatar.len() > (0 as usize) {
57                format!(
58                    "<div class='wj-message-avatar'><img src='{}' alt='avatar'/></div>",
59                    self.avatar
60                )
61            } else {
62                let default_icon = match self.role {
63                    MessageRole::User => "👤".to_string(),
64                    MessageRole::Assistant => "🤖".to_string(),
65                    MessageRole::System => "⚙️".to_string(),
66                };
67                format!("<div class='wj-message-avatar'>{}</div>", default_icon)
68            }
69        };
70        let timestamp_html = {
71            if self.timestamp.len() > (0 as usize) {
72                format!("<div class='wj-message-timestamp'>{}</div>", self.timestamp)
73            } else {
74                String::from("")
75            }
76        };
77        format!(
78            "<div class='wj-chat-message {}'>
79                {}
80                <div class='wj-message-content-wrapper'>
81                    <div class='wj-message-content'>{}</div>
82                    {}
83                </div>
84            </div>",
85            role_class, avatar_html, self.content, timestamp_html
86        )
87    }
88}