Resultをio::Resultに変換する

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::Errorio::ErrorKindからfrom関数で生成できる。
  • io::ErrorKindドキュメントにあるようにenumとして定義されている。このコードのような不正なデータを受け取った場合はInvalidDataで表せそう。