Co-authored-by: Sharang Parnerkar <parnerkarsharang@gmail.com> Reviewed-on: #6
72 lines
1.9 KiB
Rust
72 lines
1.9 KiB
Rust
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<Attachment>,
|
|
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<ChatMessage>,
|
|
pub created_at: String,
|
|
}
|