diff --git a/src/arrayvec.rs b/src/arrayvec.rs index d45041c..3bf4ecd 100644 --- a/src/arrayvec.rs +++ b/src/arrayvec.rs @@ -1025,16 +1025,15 @@ where } #[cfg(feature = "experimental_write_impl")] -impl core::fmt::Write for ArrayVec -where - A: Array, - A::Item: From, +impl> core::fmt::Write for ArrayVec { fn write_str(&mut self, s: &str) -> core::fmt::Result { - if self.len() + s.as_bytes().len() <= A::CAPACITY { - for byte in s.bytes() { - self.push(A::Item::from(byte)) - } + let my_len = self.len(); + let str_len = s.as_bytes().len(); + if my_len + str_len <= A::CAPACITY { + let remainder = &mut self.data.as_slice()[my_len..]; + let target = &mut remainder[..str_len]; + target.copy_from_slice(s.as_bytes()); Ok(()) } else { Err(core::fmt::Error)