Búsqueda de sitios web

typescript - Cómo manejar inconsistencias entre ts-proto y prost al serializar matrices numéricas vacías


Me encuentro en una situación tratando de traducir una base de código de TypeScript a Rust, mientras mantengo la compatibilidad y no rompo nada.

En el lado de TypeScript, se ha usado ts-proto para generar enlaces, y en el lado de Rust he estado usando prost y tonic

Recientemente, me di cuenta de que un campo específico en uno de nuestros mensajes tiene inconsistencias en su formato de serialización entre las dos implementaciones. Específicamente, los arrays numéricos se tratan de manera diferente al codificarlos en bytes.

En ts-proto, dado un campo de array numérico en un mensaje, si el array está vacío, su serialización en bytes incluye dos bytes cero

En prost, dado un arreglo numérico vacío, el campo se omite por completo y no forma parte de la serialización en absoluto

Desafortunadamente, no puedo cambiar la estructura del mensaje.

Lo que me gustaría hacer idealmente es tener una manera de sobrescribir la función encode_raw generada a través de prost_build para ese tipo de mensaje, pero ese mensaje además está presente como una propiedad en otros mensajes y no es un objeto de nivel superior por sí mismo.

Siendo nuevo en Rust, también aprendí recientemente que no es posible sobrescribir métodos en las implementaciones de traits, y idealmente no quiero bifurcar prost y mantener eso yo mismo.

Ahora, estoy buscando ayuda de la comunidad aquí que tenga más experiencia con Rust y prost que yo: estas son las opciones que tengo en este momento, pero por favor sugieran más si tienen alguna:

  • Incorpora una función mínima de TypeScript que use ts-proto para incrustaciones dentro de Rust y llámala usando el sandbox de JS
  • Bifurca prost y mantiene una versión ligeramente modificada que incluye arrays numéricos vacíos en la serialización de bytes de la misma manera que lo hace ts-proto

¿Qué sugerirías?