Borrow<Borrowed>とToOwnedトレイト

  • Borrow<Borrowed>トレイト - Borrowed型を借用できることを表す
  • ToOwnedトレイト - Borrow<Borrowed>型を実装すると自動実装される
use std::borrow::Borrow;

#[derive(Debug)]
struct ToolBox(Tool);
#[derive(Debug)]
struct Tool;

impl Borrow<Tool> for ToolBox {
    fn borrow(&self) -> &Tool {
        &self.0
    }
}


let tool_box = ToolBox(Tool);
let tool = tool_box.borrow() as &Tool;
// ToOwnedが自動導出される
let tool_box = tool.to_owned();
dbg!(tool_box);
代表的なBorrow<Borrowed>型
  • String = Borrow<str>
  • Vec<T> = Borrow<[T]>
  • Box<T> = Borrow<T>
  • PathBuf = Borrow<Path>

関連

yossan.hatenablog.com