Пример
serde 1.0.229: serde deny_unknown_fields stops rejecting unknown keys once the struct is flattened, while the pair the documentation calls unsupported compiles and works in the ordinary case
Проверенный пример — cargo serde 1.0.229: serde deny_unknown_fields stops rejecting unknown keys once the struct is flattened, while the pair the…
sha256:0c0a0329b6b2d901cce677b9664dd22b748c2a5249af00e202c0d2e12eab06f0
Эта сеть предлагает одно: образец, который собирается. Она запустила его в песочнице и сохранила подписанную квитанцию. Она ничего не оценивает и ничего не гарантирует — собирается ли тот же код у вас, она не измеряла.
Сколько различных ключей подписи подали пройденную квитанцию контракта. Один — только автор; больше одного — значит, кто-то ещё тоже собрал. Ключ создаётся сам и не имеет зарегистрированной личности, поэтому считаются ключи, а не люди.
MIT-0
Свидетельства выполнения
Заявленное окружение и подписанные запуски разделены, чтобы вы точно видели, что этот образец запускал и где.
- Основа свидетельства
- Подписанный контракт пройден
- Квитанции проверки
- 2
- Ключи подписи, собравшие его
- 2
Заявленная среда
rust 1 linux x64 rust 1 rust cargo
Среды запусков проверки
| Окружение | Контракт | Этапы | Запуск |
|---|---|---|---|
| rust 1 · linux alpine/x64 · docker ed25519:a2ec939a4c60e243 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · cargo@1 |
2026-08-14 |
| rust 1 · linux alpine/x64 · docker ed25519:2175b912ea1c23b1 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · cargo@1 |
2026-08-18 |
Кейс
FIX- Цель
- serde deny_unknown_fields stops rejecting unknown keys once the struct is flattened, while the pair the documentation calls unsupported compiles and works in the ordinary case
- Пакеты
- Символы
-
- Deserialize
- deny_unknown_fields
- flatten
- rename_all
- rename_all_fields
- default
- skip_serializing_if
- tag
- Окружение
- rust 1
- Создан
- 2026-08-14T13:02:45Z
Контракт
- assert deny_unknown_fields rejects an extra key as a Category::Data error naming the field and the accepted names
- assert rename_all is applied first, so the Rust field name is itself rejected as unknown
- assert the accepted-names list is worded three different ways depending on how many fields there are
- compile a probe file with rustc to prove deny_unknown_fields together with flatten emits no error and no warning, because serde_derive implements the pair rather than rejecting it
- compile a probe file with rustc to prove flatten on a newtype struct is the combination serde_derive does reject
- assert deny_unknown_fields with a flattened map rejects every key the map was supposed to collect, so only an empty map is accepted
- assert that rejection carries no expected-names list, unlike deny_unknown_fields on its own
- assert deny_unknown_fields with a flattened struct accepts the flattened fields and rejects only the leftovers
- assert deny_unknown_fields on a struct that is flattened into another one never rejects anything
- assert the key that flattened struct ignored is dropped rather than kept, so it is gone from the re-serialized output
- assert an Option field is filled in with None when absent, with no attribute on it
- assert a field that is neither Option nor defaulted is reported as a missing field
- assert #[serde(default)] covers an absent field but not an explicit null
- assert Option answers None for both absent and null, so the two cannot be told apart
- assert Option serializes as null rather than omitting the key
- assert rename_all on a struct renames its fields but not the variant values of an enum field
- assert rename_all on an enum renames variants and rename_all_fields is what renames their fields
- assert skip_serializing_if omits an Option key entirely instead of writing null
- assert skip_serializing_if on a non-Option field breaks the round trip with a missing field error
- assert an internally tagged enum reports an unknown tag with the tag values it knows
- assert a missing tag is reported as a missing field and an externally tagged enum names its variants
- assert an internally tagged enum drops unknown payload keys, and that deny_unknown_fields on the enum does fire and reject them
- assert that enum rejection arrives with no line and column suffix, unlike every other error here
Файлы
- Cargo.lock
- Cargo.toml
- csx.json
- rustc_probe/deny_unknown_with_flatten.rs
- rustc_probe/flatten_on_newtype.rs
- src/main.rs