如何将结构转换为具有完全相同的字段名称和类型的另一个结构?

How can I convert a struct to another struct with exactly the same field names and types?

我有两个具有相同名称、字段(和字段类型)的相同结构,它们位于不同的模块中。它们由派生宏构造,并希望轻松地从一个转换为另一个。

例如

mod a {
    struct A {
        field1: String,
        field2: String,
    }
}

mod b {
    struct A {
        field1: String,
        field2: String,
    }
}

我希望能够做 let a: a::A = a::A::from(b::A) 或类似的事情。

impl From<b::A> for a::A 需要在 from() 方法中写入来自两个结构的所有字段。如果没有所有相关的样板文件,有什么方法可以实现这一目标吗?

似乎在实现 this 之类的东西之前,实现此转换的唯一方法是序列化:

impl From<b::A> for a::A {
    fn from(a: b::A) -> Self {
        let serialised = serde_json::to_string(&a).unwrap();
        serde_json::from_str(&serialised).unwrap()
    }
}

Source