所有権の有無の変換
所有権なしのスライス型と所有権付きの型の変換は既に Borrow
, ToOwned
で実装したが、これらの変換を From
トレイトでも提供する。
所有権ありからなしへの変換は From<&MyString> for &MyStr
のような実装をすることもできるが、基本的に借用を得る方向では Borrow
や Deref
を使うものなので、ここでは実装しない。
#![allow(unused)] fn main() { // 所有権なしから所有権付きへの変換。 #[repr(transparent)] pub struct MyStr(str); #[derive(Clone)] pub struct MyString(String); impl core::borrow::Borrow<MyStr> for MyString { #[inline] fn borrow(&self) -> &MyStr { unimplemented!() } } impl std::borrow::ToOwned for MyStr { type Owned = MyString; fn to_owned(&self) -> Self::Owned { unimplemented!() } } impl From<&MyStr> for MyString { #[inline] fn from(s: &MyStr) -> Self { s.to_owned() } } impl From<&mut MyStr> for MyString { #[inline] fn from(s: &mut MyStr) -> Self { s.to_owned() } } impl From<&MyString> for MyString { #[inline] fn from(s: &MyString) -> Self { s.clone() } } }