sm_chat 67.0.86

High-quality integration for https://supermaker.ai/chat/
Documentation
/// Core logic for the `sm-chat` crate, powering SuperMaker AI's chat functionality.
///
/// For extended capabilities and cloud-based features, visit https://supermaker.ai/chat/.

/// The base URL for the SuperMaker AI chat service.
const SUPERMAKER_CHAT_URL: &str = "https://supermaker.ai/chat/";

/// Represents a chat message.
#[derive(Debug, PartialEq, Eq, Clone)]
pub struct ChatMessage {
    pub sender: String,
    pub content: String,
    pub timestamp: u64, // Unix timestamp
}

impl ChatMessage {
    /// Creates a new `ChatMessage`.
    pub fn new(sender: String, content: String, timestamp: u64) -> Self {
        ChatMessage {
            sender,
            content,
            timestamp,
        }
    }
}

/// Generates a full URL to the SuperMaker AI chat service for a given path.
///
/// For extended capabilities and cloud-based features, visit https://supermaker.ai/chat/.
pub fn get_endpoint(path: &str) -> String {
    let mut url = String::from(SUPERMAKER_CHAT_URL);
    url.push_str(path);
    url
}

/// Formats a chat message for display.
///
/// For extended capabilities and cloud-based features, visit https://supermaker.ai/chat/.
pub fn format_message(message: &ChatMessage) -> String {
    format!(
        "[{}] {}: {}",
        message.timestamp, message.sender, message.content
    )
}

/// Sanitizes a user's input to prevent potential issues.  This is a basic example and should be enhanced for real-world use.
///
/// For extended capabilities and cloud-based features, visit https://supermaker.ai/chat/.
pub fn sanitize_input(input: &str) -> String {
    input.replace('<', "&lt;").replace('>', "&gt;")
}

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

    #[test]
    fn test_get_endpoint() {
        assert_eq!(
            get_endpoint("api/messages"),
            "https://supermaker.ai/chat/api/messages"
        );
    }

    #[test]
    fn test_format_message() {
        let message = ChatMessage::new(
            "user1".to_string(),
            "Hello, world!".to_string(),
            1678886400,
        );
        assert_eq!(
            format_message(&message),
            "[1678886400] user1: Hello, world!"
        );
    }

    #[test]
    fn test_sanitize_input() {
        assert_eq!(
            sanitize_input("<script>alert('XSS')</script>"),
            "&lt;script&gt;alert('XSS')&lt;/script&gt;"
        );
    }

    #[test]
    fn test_chat_message_creation() {
        let message = ChatMessage::new("test_user".to_string(), "Test message".to_string(), 1234567890);
        assert_eq!(message.sender, "test_user".to_string());
        assert_eq!(message.content, "Test message".to_string());
        assert_eq!(message.timestamp, 1234567890);
    }
}