use crate::provider::Message;
#[derive(Debug, Clone)]
pub struct DerivedContext {
pub messages: Vec<Message>,
pub origin_len: usize,
pub compressed: bool,
}
pub(super) fn messages_len_changed(before: usize, after: &[Message]) -> bool {
before != after.len()
}
#[cfg(test)]
mod tests {
use super::*;
use crate::provider::{ContentPart, Role};
#[test]
fn derived_context_record_round_trips() {
let ctx = DerivedContext {
messages: vec![Message {
role: Role::User,
content: vec![ContentPart::Text {
text: "hi".to_string(),
}],
}],
origin_len: 1,
compressed: false,
};
let cloned = ctx.clone();
assert_eq!(ctx.origin_len, cloned.origin_len);
assert_eq!(ctx.compressed, cloned.compressed);
assert_eq!(ctx.messages.len(), cloned.messages.len());
}
#[test]
fn messages_len_changed_detects_shrink_and_noop() {
let empty: Vec<Message> = Vec::new();
assert!(!messages_len_changed(0, &empty));
let one = vec![Message {
role: Role::User,
content: vec![ContentPart::Text {
text: "x".to_string(),
}],
}];
assert!(messages_len_changed(5, &one));
assert!(!messages_len_changed(1, &one));
}
}