From bc60f0a6b4195e8e9df7f6868853bfe7a94cf3b1 Mon Sep 17 00:00:00 2001 From: adlee-was-taken Date: Sun, 19 Apr 2026 12:58:43 -0400 Subject: [PATCH] docs(core): add "type" tag-collision invariant to ItemCore Reviewer note: flatten semantics of serde tag = "type" means no *Core struct may ever use "type" as a field name. Co-Authored-By: Claude Opus 4.7 (1M context) --- crates/idfoto-core/src/item_types/mod.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/crates/idfoto-core/src/item_types/mod.rs b/crates/idfoto-core/src/item_types/mod.rs index eb6d2d1..f8a6e22 100644 --- a/crates/idfoto-core/src/item_types/mod.rs +++ b/crates/idfoto-core/src/item_types/mod.rs @@ -35,6 +35,9 @@ pub enum ItemType { Totp, } +// INVARIANT: no *Core struct may have a field serialized as "type" — +// that key is reserved for serde's internal tag. Use "kind" for +// type-discriminant fields within core structs (CardKind, TotpKind). #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(tag = "type", rename_all = "snake_case")] pub enum ItemCore {