ReadトレイトやWriteトレイトを実装するには、io::Resultを返す必要がある。これらの関数のなかでstd::result::Resultを扱うとき、これをio::Resultに変換したい。
fn write(&mut self, buf: &[u8]) -> io::Result {
let string = String::from_utf8(buf.to_vec());
.map_err(io::Error::from(io::ErrorKind::InvalidData))?;
// ...
}
io::Resultにするために、map_errを使ってエラーの型をio::Errorに変換する。io::Errorはio::ErrorKindからfrom関数で生成できる。io::ErrorKindはドキュメントにあるようにenumとして定義されている。このコードのような不正なデータを受け取った場合はInvalidDataで表せそう。