use serde::{Deserialize, Serialize}; /// The role of a participant in a chat conversation. #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub enum ChatRole { /// Message sent by the human user User, /// Message generated by the AI assistant Assistant, /// System-level instruction (not displayed in UI) System, } /// The type of file attached to a chat message. #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub enum AttachmentKind { /// Image file (png, jpg, webp, etc.) Image, /// Document file (pdf, docx, txt, etc.) Document, /// Source code file Code, } /// A file attachment on a chat message. /// /// # Fields /// /// * `name` - Original filename /// * `kind` - Type of attachment for rendering /// * `size_bytes` - File size in bytes #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct Attachment { pub name: String, pub kind: AttachmentKind, pub size_bytes: u64, } /// A single message in a chat conversation. /// /// # Fields /// /// * `id` - Unique message identifier /// * `role` - Who sent this message /// * `content` - The message text content /// * `attachments` - Optional file attachments /// * `timestamp` - ISO 8601 timestamp string #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct ChatMessage { pub id: String, pub role: ChatRole, pub content: String, pub attachments: Vec, pub timestamp: String, } /// A chat session containing a conversation history. /// /// # Fields /// /// * `id` - Unique session identifier /// * `title` - Display title (usually derived from first message) /// * `messages` - Ordered list of messages in the session /// * `created_at` - ISO 8601 creation timestamp #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct ChatSession { pub id: String, pub title: String, pub messages: Vec, pub created_at: String, }