1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Serialize, Deserialize)]
5#[serde(rename_all = "lowercase")]
6pub enum MessageRole {
7 System,
9 User,
11 Assistant,
13}
14
15impl std::fmt::Display for MessageRole {
16 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
17 write!(
18 f,
19 "{}",
20 match self {
21 MessageRole::System => "system",
22 MessageRole::User => "user",
23 MessageRole::Assistant => "assistant",
24 }
25 )
26 }
27}
28
29#[derive(Debug, Serialize, Deserialize)]
31pub struct Message {
32 pub role: MessageRole,
34 pub content: String,
36}
37
38impl Message {
39 pub fn system(content: String) -> Self {
41 Self {
42 role: MessageRole::System,
43 content,
44 }
45 }
46
47 pub fn user(content: String) -> Self {
49 Self {
50 role: MessageRole::User,
51 content,
52 }
53 }
54
55 pub fn assistant(content: String) -> Self {
57 Self {
58 role: MessageRole::Assistant,
59 content,
60 }
61 }
62}