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

问题描述 投票:0回答:1

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

例如

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()
方法中写入两个结构体中的所有字段。有没有办法在没有所有相关样板的情况下实现这一目标?

struct rust type-conversion
1个回答
7
投票

似乎在实现像this这样的东西之前,实现这种转换的唯一方法就是序列化:

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

来源

© www.soinside.com 2019 - 2024. All rights reserved.