在 Rust 中复制不同结构的相同字段

Copy identical fields of different struct in rust

假设我们有两个具有相同字段(和类型)的结构。

struct A {
  pub data1: i32;
  pub data2: string;
}

struct B {
  pub data1: i32;
  pub data2: string;
}

要复制结构 A 和 B,我必须这样做

fn convert_A_to_B(a: A) -> B {
  B {
    data1: a.data1,
    data2: a.data2
  }
}

我希望我能做类似的事情

B {
  ..a
}

但由于类型不同,这是不可能的。是否有任何宏或语法可以简单地移动所有相同的字段?

如果您确定结构内存布局相同,您可以使用std::mem::transmute:

#[repr(C)]
#[derive(Debug)]
struct A {
  pub data1: i32,
  pub data2: String
}

#[repr(C)]
struct B {
  pub data1: i32,
  pub data2: String
}

impl From<B> for A {
    fn from(b: B) -> A {
        unsafe { std::mem::transmute(b) }
    }
}

fn main() {
    let b = B {data1: 10, data2: "Foo".to_string()};
    let a: A = b.into();
    
    println!("{a:?}");
}

Playground