#[derive(Debug, Clone)]
pub struct ReadOnly<T>(Vec<T>);
impl<T> ReadOnly<T> {
pub fn from(vec: Vec<T>) -> Self {
Self(vec)
}
}
impl<T> std::ops::Deref for ReadOnly<T> {
type Target = [T];
fn deref(&self) -> &Self::Target {
&self.0
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn deref_access() {
let ro = ReadOnly::from(vec![1, 2, 3]);
assert_eq!(ro[0], 1);
assert_eq!(ro.len(), 3);
}
#[test]
fn from_and_iter() {
let ro = ReadOnly::from(vec!["a", "b"]);
let collected: Vec<_> = ro.iter().collect();
assert_eq!(collected, vec![&"a", &"b"]);
}
#[test]
fn clone() {
let ro = ReadOnly::from(vec![1, 2]);
let cloned = ro.clone();
assert_eq!(cloned[0], 1);
}
}