Rust の Result オブジェクトを消費せずに参照する (as_ref, as_mut)

通常、Result オブジェクトを matchunwrapok メソッドなどでハンドルすると、その Result は消費されます(所有権が移動します)。 この振る舞いを防ぐには、as_refas_mut メソッドを使います。

std::result::Result のメソッド
pub const fn as_ref(&self) -> Result<&T, &E>
pub fn as_mut(&mut self) -> Result<&mut T, &mut E>

as_ref メソッドで取得した Result オブジェクト経由で Ok/Err バリアントを参照すれば、それらのオブジェクトが消費されずに済みます。

let ok_opt = result.as_ref().ok();  // 借用 (borrow)
// ...
// ここでまだ result の Ok/Err は有効