To write to a vector, using the std::io::Write-trait, you need to pass a & mut – a mutable reference – of the vector where you need the writer. If you just pass the vector, it gets moved into the function. A reference doesn't implement the std::io::Write-trait. In code: use plist::Value; // I am using the plist crate as an example let mut buf = Vec::new(); // creating the backing vector let dic = Value::Dictionary(body); // just to get the correct type dic.