Skip to main content

llama_cpp_bindings/
chat_message_parse_outcome.rs

1use 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}