我得到了一种数据格式,其中包括一系列对象,每个对象都有一个命名字段value
。反序列化时能否删除此间接层?
反序列化时,自然表示为
/// Each record has it's own `{ value: ... }` object
#[derive(serde::Deserialize)]
struct Foobar<T> {
value: T,
}
/// The naive representation, via `Foobar`...
#[derive(serde::Deserialize)]
struct FoobarContainer {
values: Vec<Foobar<T>>,
}
虽然Foobar
除了T
之外没有增加任何额外成本,但我想在类型级别上删除此间接层:
#[derive(serde::Deserialize)]
struct FoobarContainer {
values: Vec<T>,
}
Foobar
是否仍可以通过反序列化从FoobarContainer
中删除?
在一般情况下,没有简单的方法可以进行这种转换。为此,请查看以下现有答案:
首先是我的常规解决方案,在此示例中为looks like this。
但是,在您的[[特定案例中,您说:
仅具有一个命名字段值的对象
您已经确定了关键要求:
虽然至Foobar
除了T
之外没有增加任何额外成本,但>这意味着您可以使
Foobar
具有transparent representation并在类型之间使用unsafe Rust
transmute
:transmute