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