Skip to main content

llama_cpp_bindings/model/
llama_chat_message.rs

1use std::ffi::CString;
2
3use crate::NewLlamaChatMessageError;
4
5#[derive(Debug, Eq, PartialEq, Clone)]
6pub struct LlamaChatMessage {
7    pub role: CString,
8    pub content: CString,
9}
10
11impl LlamaChatMessage {
12    /// # Errors
13    /// If either of ``role`` or ``content`` contain null bytes.
14    pub fn new(role: String, content: String) -> Result<Self, NewLlamaChatMessageError> {
15        Ok(Self {
16            role: CString::new(role)?,
17            content: CString::new(content)?,
18        })
19    }
20}
21
22#[cfg(test)]
23mod tests {
24    use super::LlamaChatMessage;
25
26    #[test]
27    fn valid_construction() {
28        let message = LlamaChatMessage::new("user".to_string(), "hello".to_string());
29
30        assert!(message.is_ok());
31    }
32
33    #[test]
34    fn null_byte_in_role_returns_error() {
35        let message = LlamaChatMessage::new("us\0er".to_string(), "hello".to_string());
36
37        assert!(message.is_err());
38    }
39
40    #[test]
41    fn null_byte_in_content_returns_error() {
42        let message = LlamaChatMessage::new("user".to_string(), "hel\0lo".to_string());
43
44        assert!(message.is_err());
45    }
46
47    #[test]
48    fn empty_strings_are_valid() {
49        let message = LlamaChatMessage::new(String::new(), String::new());
50
51        assert!(message.is_ok());
52    }
53}