llama_cpp_bindings/model/
llama_chat_message.rs1use 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 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}