構造体を囲む構造体があります。Builder
構造体があります。これらのラッパーは、Builder
に特化した動作を提供します。これらのラッパー間の変換は、本質的には特殊なメソッドを使用したBuilder
のように簡単に行う必要があります。私は説明するためにいくつかのコードを書いた - それは何かのための定型文のように思える。より良い方法がありますか?一般的な内部フィールドを共有する構造体にFromとIntoを使用するより良い方法がありますか
struct Builder;
trait ObjectBuilder: Into<Builder> + From<Builder> {
fn from_other<T: ObjectBuilder>(x: T) -> Self {
let builder = x.into();
builder.into()
}
}
struct OtherBuilder {
inner: Builder
}
impl From<Builder> for OtherBuilder {
fn from(x: Builder) -> OtherBuilder {
OtherBuilder {
inner: x
}
}
}
impl Into<Builder> for OtherBuilder {
fn into(self) -> Builder {
self.inner
}
}
struct OtherOtherBuilder {
inner: Builder
}
impl From<Builder> for OtherOtherBuilder {
fn from(x: Builder) -> OtherOtherBuilder {
OtherOtherBuilder {
inner: x
}
}
}
impl Into<Builder> for OtherOtherBuilder {
fn into(self) -> Builder {
self.inner
}
}
impl ObjectBuilder for OtherBuilder {}
impl ObjectBuilder for OtherOtherBuilder {}
fn main() {
let x = Builder;
let y: OtherBuilder = x.into();
let z: OtherOtherBuilder = ObjectBuilder::from_other(y);
let y = OtherBuilder::from_other(z);
}
あなたは[newtype_derive](https://danielkeep.github.io/rust-custom-derive/doc/newtype_derive/indexを使用することができます.html)crateしかし、それはタプル構造体、すなわち 'struct OtherBuilder(Builder)'でのみ動作します。 – kennytm