windjammer_ui/components/generated/
chatmessage.rs

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