True.. the example did cover that but as I only need to get it working with JSON I didn't implement the visit_seq method.
After optimizations de Deserializer and Deserialize impls get (partially) merged together.
Interesting, I haven't seen anyone mention that before. Of course it would make sense in terms of basic inlining.
It's the size of the functions in the binary. Using Twiggy I got these results:
15714 ┊ 1.30% ┊ <remglk::glkapi::protocol::Metrics as serde_core::de::Deserialize>::deserialize::<serde::private::de::content::ContentDeserializer<serde_json::error::Error>>
2804 ┊ 0.23% ┊ <<remglk::glkapi::protocol::Metrics as serde_core::de::Deserialize>::deserialize::__FieldVisitor as serde_core::de::Visitor>::visit_bytes::<serde_json::error::Error>
774 ┊ 0.06% ┊ <<remglk::glkapi::protocol::Metrics as serde_core::de::Deserialize>::deserialize::__FieldVisitor as serde_core::de::Visitor>::visit_str::<serde_json::error::Error>
208 ┊ 0.02% ┊ <<remglk::glkapi::protocol::Metrics as serde_core::de::Deserialize>::deserialize::__Visitor as serde_core::de::Expected>::fmt
With my new manual deserialiser:
5329 ┊ 0.50% ┊ <core::marker::PhantomData<remglk::glkapi::protocol::Metrics> as serde_core::de::DeserializeSeed>::deserialize::<serde::private::de::content::ContentDeserializer<serde_json::error::Error>>
804 ┊ 0.08% ┊ serde::private::de::content::visit_content_seq::<<remglk::glkapi::protocol::Metrics as serde_core::de::Deserialize>::deserialize::MetricsVistor, serde_json::error::Error>
208 ┊ 0.02% ┊ <<remglk::glkapi::protocol::Metrics as serde_core::de::Deserialize>::deserialize::MetricsVistor as serde_core::de::Expected>::fmt