← Journal technique
Ferry·intégrité des données

bincode ne peut pas désérialiser un enum étiqueté

serde's internally tagged enum representation cannot deserialize under bincode: internal tagging needs a self-describing format the binary encoding structurally can't provide.

Ça ne pouvait pas marcher

Une course, un ordre, une colonne pour deux choses. La forme l'excluait avant même l'exécution.

L'enveloppe de fil utilisait la représentation tag/content de serde et encodait avec bincode. Cette combinaison ne peut pas marcher : l'étiquetage interne a besoin d'un format auto-descriptif pour que le désérialiseur puisse regarder en avant une étiquette de chaîne, et le format binaire de bincode ne peut structurellement pas faire ça. Pas un bug dans l'une ou l'autre bibliothèque, une inadéquation entre deux choix raisonnables.

Attrapé par les propres tests unitaires de core::transfer plutôt que laissé latent, ce qui est l'argument pour rendre le moteur de transfert testable sans socket. Le correctif a retiré l'attribut de tag, et pendant que j'y étais j'ai réalisé que ces types sont le protocole pair-à-pair et ne touchent jamais l'interface, donc leurs exports ts-rs étaient inutiles aussi — huit fichiers de bindings périmés en sont sortis.