[archivist] MemoryBoundedBuffer uses VecDeque's iterator.

Change-Id: I5bb32df338c0d33d0f9d0b240d8edcf7f90ec066
diff --git a/src/diagnostics/archivist/src/logs.rs b/src/diagnostics/archivist/src/logs.rs
index 193117f..890855c 100644
--- a/src/diagnostics/archivist/src/logs.rs
+++ b/src/diagnostics/archivist/src/logs.rs
@@ -199,8 +199,10 @@
         {
             let mut log_length = 0;
             let mut v = vec![];
-            for (msg, s) in shared_members.log_msg_buffer.iter_mut() {
-                if lw.filter(msg) {
+            for (msg, s) in shared_members.log_msg_buffer.iter() {
+                // TODO(fxbug.dev/7989) remove clone for mutable reference when FTP-057 impl'd
+                let mut msg = msg.clone();
+                if lw.filter(&mut msg) {
                     if log_length + s > fidl_fuchsia_logger::MAX_LOG_MANY_SIZE_BYTES as usize {
                         if listener::ListenerStatus::Fine != lw.send_filtered_logs(&mut v) {
                             return;
diff --git a/src/diagnostics/archivist/src/logs/buffer.rs b/src/diagnostics/archivist/src/logs/buffer.rs
index cca2a8c..59b5323 100644
--- a/src/diagnostics/archivist/src/logs/buffer.rs
+++ b/src/diagnostics/archivist/src/logs/buffer.rs
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-use std::collections::{vec_deque, VecDeque};
+use std::collections::VecDeque;
 
 /// A Memory bounded buffer. MemoryBoundedBuffer does not calculate the size of `item`,
 /// rather it takes the size as argument and then maintains its internal buffer.
@@ -13,33 +13,12 @@
     capacity: usize,
 }
 
-/// `MemoryBoundedBuffer` mutable iterator.
-struct IterMut<'a, T> {
-    inner: vec_deque::IterMut<'a, (T, usize)>,
-}
-
-impl<'a, T: 'a> Iterator for IterMut<'a, T> {
-    type Item = (&'a mut T, usize);
-
-    #[inline]
-    fn next(&mut self) -> Option<(&'a mut T, usize)> {
-        self.inner.next().map(|(t, s)| (t, *s))
-    }
-
-    #[inline]
-    fn size_hint(&self) -> (usize, Option<usize>) {
-        self.inner.size_hint()
-    }
-}
-
 impl<T> MemoryBoundedBuffer<T> {
-    /// capacity in bytes
     pub fn new(capacity: usize) -> MemoryBoundedBuffer<T> {
         assert!(capacity > 0, "capacity should be more than 0");
         MemoryBoundedBuffer { inner: VecDeque::new(), capacity: capacity, total_size: 0 }
     }
 
-    /// size in bytes
     pub fn push(&mut self, item: T, size: usize) {
         self.inner.push_back((item, size));
         self.total_size += size;
@@ -49,8 +28,8 @@
         }
     }
 
-    pub fn iter_mut(&mut self) -> impl Iterator<Item = (&'_ mut T, usize)> {
-        IterMut { inner: self.inner.iter_mut() }
+    pub fn iter(&mut self) -> impl Iterator<Item = &(T, usize)> {
+        self.inner.iter()
     }
 }
 
@@ -64,10 +43,7 @@
         m.push(1, 4);
         m.push(2, 4);
         m.push(3, 4);
-        assert_eq!(
-            &m.iter_mut().collect::<Vec<(&mut i32, usize)>>()[..],
-            &[(&mut 1, 4), (&mut 2, 4), (&mut 3, 4)]
-        );
+        assert_eq!(&m.iter().collect::<Vec<&(i32, usize)>>()[..], &[&(1, 4), &(2, 4), &(3, 4)]);
     }
 
     #[test]
@@ -76,15 +52,9 @@
         m.push(1, 4);
         m.push(2, 4);
         m.push(3, 5);
-        assert_eq!(
-            &m.iter_mut().collect::<Vec<(&mut i32, usize)>>()[..],
-            &[(&mut 2, 4), (&mut 3, 5)]
-        );
+        assert_eq!(&m.iter().collect::<Vec<&(i32, usize)>>()[..], &[&(2, 4), &(3, 5)]);
         m.push(4, 4);
         m.push(5, 4);
-        assert_eq!(
-            &m.iter_mut().collect::<Vec<(&mut i32, usize)>>()[..],
-            &[(&mut 4, 4), (&mut 5, 4)]
-        );
+        assert_eq!(&m.iter().collect::<Vec<&(i32, usize)>>()[..], &[&(4, 4), &(5, 4)]);
     }
 }
diff --git a/src/diagnostics/archivist/src/logs/listener.rs b/src/diagnostics/archivist/src/logs/listener.rs
index eab4295..040486a 100644
--- a/src/diagnostics/archivist/src/logs/listener.rs
+++ b/src/diagnostics/archivist/src/logs/listener.rs
@@ -36,8 +36,9 @@
     }
 
     /// This fn assumes that logs have already been filtered.
-    pub fn send_filtered_logs(&self, log_messages: &mut Vec<&mut LogMessage>) -> ListenerStatus {
-        if let Err(e) = self.listener.log_many(&mut log_messages.iter_mut().map(|x| &mut **x)) {
+    pub fn send_filtered_logs(&self, log_messages: &mut Vec<LogMessage>) -> ListenerStatus {
+        let res = self.listener.log_many(&mut log_messages.iter_mut());
+        if let Err(e) = res {
             if e.is_closed() {
                 ListenerStatus::Stale
             } else {