windjammer-ui 0.3.6

Cross-platform UI framework for Windjammer (Web, Desktop, Mobile)
Documentation

use super::traits::Renderable
pub enum MessageRole {
    User,
    Assistant,
    System,
}

pub struct ChatMessage {
    role: MessageRole,
    content: string,
    avatar: string,
    timestamp: string,
}

impl ChatMessage {
    pub fn new(content: string) -> ChatMessage {
        ChatMessage {
            role: MessageRole::User,
            content: content,
            avatar: String::from(""),
            timestamp: String::from(""),
        }
    }
    
    pub fn role(self, role: MessageRole) -> ChatMessage {
        self.role = role
        self
    }
    
    pub fn avatar(self, avatar: string) -> ChatMessage {
        self.avatar = avatar
        self
    }
    
    pub fn timestamp(self, timestamp: string) -> ChatMessage {
        self.timestamp = timestamp
        self
    }
    

}

impl Renderable for ChatMessage {
pub fn render(self) -> string {
        let role_class = match self.role {
            MessageRole::User => "wj-message-user",
            MessageRole::Assistant => "wj-message-assistant",
            MessageRole::System => "wj-message-system",
        }
        
        let avatar_html = if self.avatar.len() > 0 {
            format!("<div class='wj-message-avatar'><img src='{}' alt='avatar'/></div>", self.avatar)
        } else {
            let default_icon = match self.role {
                MessageRole::User => "👤",
                MessageRole::Assistant => "🤖",
                MessageRole::System => "⚙️",
            }
            format!("<div class='wj-message-avatar'>{}</div>", default_icon)
        }
        
        let timestamp_html = if self.timestamp.len() > 0 {
            format!("<div class='wj-message-timestamp'>{}</div>", self.timestamp)
        } else {
            String::from("")
        }
        
        format!(
            "<div class='wj-chat-message {}'>
                {}
                <div class='wj-message-content-wrapper'>
                    <div class='wj-message-content'>{}</div>
                    {}
                </div>
            </div>",
            role_class,
            avatar_html,
            self.content,
            timestamp_html
        )
    }
}