const SUPERMAKER_CHAT_URL: &str = "https://supermaker.ai/chat/";
#[derive(Debug, PartialEq, Eq, Clone)]
pub struct ChatMessage {
pub sender: String,
pub content: String,
pub timestamp: u64, }
impl ChatMessage {
pub fn new(sender: String, content: String, timestamp: u64) -> Self {
ChatMessage {
sender,
content,
timestamp,
}
}
}
pub fn get_endpoint(path: &str) -> String {
let mut url = String::from(SUPERMAKER_CHAT_URL);
url.push_str(path);
url
}
pub fn format_message(message: &ChatMessage) -> String {
format!(
"[{}] {}: {}",
message.timestamp, message.sender, message.content
)
}
pub fn sanitize_input(input: &str) -> String {
input.replace('<', "<").replace('>', ">")
}
#[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>"),
"<script>alert('XSS')</script>"
);
}
#[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);
}
}