1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
use std::ops::{Deref, DerefMut}; pub type ContinuationToken = String; #[derive(Debug, Clone)] pub struct IncompleteVector<T> { token: Option<String>, vector: Vec<T>, } impl<T> IncompleteVector<T> { pub fn new(token: Option<String>, vector: Vec<T>) -> IncompleteVector<T> { IncompleteVector { token: token, vector: vector, } } pub fn is_complete(&self) -> bool { self.token().is_none() } pub fn token(&self) -> Option<&str> { if let Some(ref t) = self.token { Some(t) } else { None } } } impl<T> DerefMut for IncompleteVector<T> { fn deref_mut(&mut self) -> &mut [T] { &mut self.vector } } impl<T> Deref for IncompleteVector<T> { type Target = [T]; fn deref(&self) -> &[T] { &self.vector } } #[cfg(test)] mod test { use super::IncompleteVector; #[test] fn test_incomplete_vector_complete() { let v = vec![0, 1, 2, 3, 4, 5]; let ic = IncompleteVector::new(None, v); assert_eq!(ic.is_complete(), true); } #[test] fn test_incomplete_vector_incomplete() { let v = vec![0, 1, 2, 3, 4, 5]; let ic = IncompleteVector::new(Some("aaa".to_owned()), v); assert_eq!(ic.is_complete(), false); } #[test] fn test_incomplete_vector_deref() { let v = vec![0, 1, 2, 3, 4, 5]; let ic = IncompleteVector::new(None, v); assert_eq!(ic[0], 0); } #[test] fn test_incomplete_vector_deref_sum() { let v = vec![0, 1, 2, 3, 4, 5]; let ic = IncompleteVector::new(None, v); assert_eq!(ic[0] + ic[4], 4); } }