llama_cpp_bindings/
chat_message_parse_outcome.rs1use llama_cpp_bindings_types::ParsedChatMessage;
2
3use crate::raw_chat_message::RawChatMessage;
4
5pub enum ChatMessageParseOutcome {
6 Recognized(ParsedChatMessage),
7 Unrecognized(RawChatMessage),
8}
9
10#[cfg(test)]
11mod tests {
12 use llama_cpp_bindings_types::ParsedChatMessage;
13
14 use super::ChatMessageParseOutcome;
15 use crate::raw_chat_message::RawChatMessage;
16
17 #[test]
18 fn both_variants_destructure_to_their_inner_payloads() {
19 let outcomes = [
20 ChatMessageParseOutcome::Recognized(ParsedChatMessage::new(
21 "content".to_owned(),
22 "reasoning".to_owned(),
23 Vec::new(),
24 )),
25 ChatMessageParseOutcome::Unrecognized(RawChatMessage {
26 tools_json: "[]".to_owned(),
27 text: "raw input".to_owned(),
28 is_partial: false,
29 ffi_error_message: "parser bailed".to_owned(),
30 }),
31 ];
32
33 let mut saw_recognized = false;
34 let mut saw_unrecognized = false;
35 for outcome in outcomes {
36 match outcome {
37 ChatMessageParseOutcome::Recognized(parsed) => {
38 assert_eq!(parsed.content, "content");
39 assert_eq!(parsed.reasoning_content, "reasoning");
40 assert!(parsed.tool_calls.is_empty());
41 saw_recognized = true;
42 }
43 ChatMessageParseOutcome::Unrecognized(raw) => {
44 assert_eq!(raw.tools_json, "[]");
45 assert_eq!(raw.text, "raw input");
46 assert!(!raw.is_partial);
47 assert_eq!(raw.ffi_error_message, "parser bailed");
48 saw_unrecognized = true;
49 }
50 }
51 }
52
53 assert!(
54 saw_recognized && saw_unrecognized,
55 "both variants must dispatch through the match"
56 );
57 }
58}