Skip to main content

agent_context/
readonly.rs

1/// 只读容器:构造后不可变,仅暴露切片访问。
2///
3/// 用于存储 `AgentContext` 的 immutable 区域(系统提示词等)。
4/// 通过 `Deref<Target = [T]>` 暴露不可变引用,内部无法被外部修改。
5#[derive(Debug, Clone)]
6pub struct ReadOnly<T>(Vec<T>);
7
8impl<T> ReadOnly<T> {
9    /// 从 `Vec<T>` 构造只读容器,消费所有权。
10    pub fn from(vec: Vec<T>) -> Self {
11        Self(vec)
12    }
13}
14
15impl<T> std::ops::Deref for ReadOnly<T> {
16    type Target = [T];
17    fn deref(&self) -> &Self::Target {
18        &self.0
19    }
20}
21
22#[cfg(test)]
23mod tests {
24    use super::*;
25
26    #[test]
27    fn deref_access() {
28        let ro = ReadOnly::from(vec![1, 2, 3]);
29        assert_eq!(ro[0], 1);
30        assert_eq!(ro.len(), 3);
31    }
32
33    #[test]
34    fn from_and_iter() {
35        let ro = ReadOnly::from(vec!["a", "b"]);
36        let collected: Vec<_> = ro.iter().collect();
37        assert_eq!(collected, vec![&"a", &"b"]);
38    }
39
40    #[test]
41    fn clone() {
42        let ro = ReadOnly::from(vec![1, 2]);
43        let cloned = ro.clone();
44        assert_eq!(cloned[0], 1);
45    }
46}