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