在其他编程语言(如Java)中,可以使用库将对象字段映射到另一个对象(例如mapstruct)。这对于隔离控制器和服务确实非常有用。
PersonDto personDto = mapper.businessToDto(personBusiness);
我找不到用Rust语言如何做这件事情的方法?我没有发现任何有帮助的库或者任何可行的方法。非常感谢任何提供相关资源的人!
From
trait来实现。该trait用于将一种类型转换为另一种类型。struct Person {
name: String,
age: u8,
}
struct PersonDto {
name: String,
age: u64,
}
impl From<Person> for PersonDto {
fn from(p: Person) -> Self {
Self {
name: p.name,
age: p.age.into(),
}
}
}
所以你可以进行 Into
转换:
let person = Person { name: "Alex".to_string(), age: 42 };
let person_dto: PersonDto = person.into();
// or via an explicit `T::from:
let person_dto = PersonDto::from(person);
struct Person {
name: String,
age: u8,
}
#[derive(o2o)]
#[o2o(from_owned(Person))]
struct PersonDto {
name: String,
#[o2o(as_type(u8))]
age: u64,
}
impl std::convert::From<Person> for PersonDto {
fn from(value: Person) -> PersonDto {
PersonDto {
name: value.name,
age: value.age as u64,
}
}
}
From
、Into
和自定义IntoExisting
特征的实现,并且可以处理字段名称、类型不匹配、跳过字段、嵌套结构体、嵌套集合、'不平衡'结构体、包装结构体等情况。它还被设计为适用于映射的任何一侧。
mapstruct
这样的东西变得不必要。 - mcarton