Pre-RFC: Separate reading/writing String from std::io::Read/std::io::Write

True. I don’t think Read needs splitting, though. As my exercise shows (pending some yet unpublished commits), a decoder can be composable as a general purpose reader, and its implementation of read_to_string can be optimized relying on the fact that decoded content is valid UTF-8. There may be use for an add-on trait to BufRead, that would fill and return the internal buffer as a &str when UTF-8 content can be guaranteed (in my design that’d be for a decoding reader combining an inner BufRead source and a decoder).

For writing, I’m thinking to have the encoding writer implement something akin to std::fmt::Write, but with an error variant that exposes a possible std::io::Error, which is close to what you are suggesting. In fact, I don’t see why std::fmt::Error itself cannot provide an optional underlying I/O error.