Comments (3)
Yeah I'm afraid you'll have to manually capture extra fields like here: https://serde.rs/attr-flatten.html#capture-additional-fields
The reason is that, unlike flatten
, deny_unknown_fields
doesn't switch deserialization from structs to maps, and we have no way of knowing whether Serde will want those extra fields or not.
Being able to pick only known properties from JS object instead of iterating over its all key-value pairs as a map is a significant perf optimisation, and I wouldn't want to remove it for the relatively rare attribute.
Ideally Serde upstream should switch to deserialize_map
when deny_unknown_fields
is used, but I'm not sure if they'd be open to do so.
from serde-wasm-bindgen.
The easiest solution for now might be to use a helper like this:
fn deserialize_deny_unknown_fields<'de, T: Deserialize<'de>>(value: JsValue) -> Result<T, serde_wasm_bindgen::Error> {
#[derive(Deserialize)]
struct Wrap<T> {
#[serde(flatten)]
result: T,
#[serde(flatten)]
extra_fields: HashMap<String, serde::de::IgnoredAny>,
}
let Wrap {
result,
extra_fields,
} = serde_wasm_bindgen::from_value(value)?;
if !extra_fields.is_empty() {
return Err(serde::de::Error::custom(format_args!(
"Unexpected fields: {:?}",
extra_fields.keys().collect::<Vec<_>>()
)));
}
Ok(result)
}
from serde-wasm-bindgen.
@RReverser thank you for the answer! Will follow your advice.
from serde-wasm-bindgen.
Related Issues (20)
- https://www.covid19.admin.ch/en/epidemiologic/case/d/geo-regions?geoDate=2022-02-02 HOT 1
- ReferenceType integration? HOT 1
- WASM Reference Types HOT 2
- Add support for serializing `Closure`s HOT 1
- Internally tagged enumerations cannot deserialize byte buffers HOT 2
- Error is not compatible with `Sync`/`Send`/`anyhow::Error` HOT 3
- as_bytes() does not work if self is an Array HOT 3
- Better interop between Tauri and serde-wasm-bindgen HOT 1
- Produce Object instead of Map when converting to JsValue HOT 2
- Hitting an unreachable! panic in serializing HOT 5
- Structures containing usize seems to create BigInt dependency in generated JavaScript bindings HOT 4
- json_compatible Deserializer HOT 1
- IntoWasmAbi HOT 3
- Preserved value de-serialization error HOT 8
- [improvement] Allow overriding default serializer used in to_value HOT 1
- `js_sys::Function` is not serialized correctly HOT 2
- Can't figure out how to get Option<js_sys::Date> to work when serializing to JS HOT 11
- #[serde(alias = "somename")] stopped working after 0.6 HOT 15
- More efficient serialization of struct HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from serde-wasm-bindgen.