Serde using 19.8KB (file size) to deserialise 29 f64s - are any optimisations possible

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