pub mod envelope;
pub use envelope::{AudioSamples, Envelope, EnvelopeKind};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum MessageRole {
System,
User,
Assistant,
}
impl MessageRole {
pub fn as_str(&self) -> &'static str {
match self {
MessageRole::System => "system",
MessageRole::User => "user",
MessageRole::Assistant => "assistant",
}
}
}
impl std::fmt::Display for MessageRole {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", self.as_str())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_message_role_serialization_lowercase() {
assert_eq!(
serde_json::to_string(&MessageRole::System).unwrap(),
"\"system\""
);
assert_eq!(
serde_json::to_string(&MessageRole::User).unwrap(),
"\"user\""
);
assert_eq!(
serde_json::to_string(&MessageRole::Assistant).unwrap(),
"\"assistant\""
);
}
#[test]
fn test_message_role_deserialization_lowercase() {
assert_eq!(
serde_json::from_str::<MessageRole>("\"system\"").unwrap(),
MessageRole::System
);
assert_eq!(
serde_json::from_str::<MessageRole>("\"user\"").unwrap(),
MessageRole::User
);
assert_eq!(
serde_json::from_str::<MessageRole>("\"assistant\"").unwrap(),
MessageRole::Assistant
);
}
#[test]
fn test_message_role_as_str() {
assert_eq!(MessageRole::System.as_str(), "system");
assert_eq!(MessageRole::User.as_str(), "user");
assert_eq!(MessageRole::Assistant.as_str(), "assistant");
}
#[test]
fn test_message_role_display() {
assert_eq!(format!("{}", MessageRole::System), "system");
assert_eq!(format!("{}", MessageRole::User), "user");
assert_eq!(format!("{}", MessageRole::Assistant), "assistant");
}
}