Serde ignores unknown named fields when deserializing into regular structs. How can I similarly ignore extra items when deserializing into tuple structs (e.g. from a heterogeneous JSON array)?
For example, this code ignores the extra "c" field just fine:
#[derive(Serialize, Deserialize, Debug)] pub struct MyStruct { a: String, b: i32 } fn test_deserialize() -> MyStruct { ::serde_json::from_str::<MyStruct>(r#" { "a": "foo", "b": 123, "c": "ignore me" } "#).unwrap() } // => MyStruct { a: "foo", b: 123 } By contrast, this fails on the extra item in the tuple:
#[derive(Serialize, Deserialize, Debug)] pub struct MyTuple(String, i32); fn test_deserialize_tuple() -> MyTuple { ::serde_json::from_str::<MyTuple>(r#" [ "foo", 123, "ignore me" ] "#).unwrap() } // => Error("trailing characters", line: 5, column: 13) I'd like to allow extra items for forward compatibility in my data format. What's the easiest way to get Serde to ignore extra tuple items when deserializing?