1use serde::{Deserialize, Serialize};
2
3#[derive(Debug)]
5pub enum Role
6{
7 User,
9 System,
11 Assistant,
13 Custom(String),
15}
16
17#[derive(Debug, Serialize, Deserialize)]
19pub struct Message
20{
21 pub role: Role,
23 pub content: String,
25}
26
27impl Serialize for Role
28{
29 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
30 where
31 S: serde::Serializer,
32 {
33 let s = match self
34 {
35 Role::User => "user",
36 Role::System => "system",
37 Role::Assistant => "assistant",
38 Role::Custom(s) => s.as_str(),
39 };
40 serializer.serialize_str(s)
41 }
42}
43
44impl<'de> Deserialize<'de> for Role
45{
46 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
47 where
48 D: serde::Deserializer<'de>,
49 {
50 let s = String::deserialize(deserializer)?;
51 Ok(match s.as_str()
52 {
53 "user" => Role::User,
54 "system" => Role::System,
55 "assistant" => Role::Assistant,
56 other => Role::Custom(other.to_string()),
57 })
58 }
59}