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)