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