Saltar al contenido

Fechas, números y binario

Los tres tipos que JSON no tiene y que toda aplicación necesita. Cómo se representa cada uno, cuál es la elección que no se lamenta, y los dos fallos silenciosos que producen las otras.

Fechas

La regla: el core manda instantes en tiempo universal, en la cadena del formato de intercambio, y el frontend decide cómo se ven. La zona horaria y el formato son del usuario, y el navegador ya sabe hacerlo con su configuración regional.

Números

El problema es concreto: los números de JavaScript son de coma flotante de doble precisión, así que los enteros dejan de ser exactos por encima de nueve mil billones aproximadamente. Un u64 de Rust puede superar eso.

Cómo se manda como cadena, sin cambiar el tipo en Rust:

Rust
#[derive(serde::Serialize)]#[serde(rename_all = "camelCase")]pub struct Registro {    #[serde(with = "cadena")]     // un módulo pequeño que convierte a texto y de vuelta    pub id: u64,    pub tamano: u64,              // este sí cabe: no hace falta}

Y los valores especiales de coma flotante —el que no es un número, los infinitos— no existen en JSON: se convierten en nulo o hacen fallar la serialización según la librería. Si tu cálculo puede producirlos, conviene decidir qué mandar antes de que lo decida otro.

Binario

El nivel 15.3 lo adelantó y merece el detalle. Un vector de bytes se serializa por defecto como una lista de números, uno por byte. Un megabyte se convierte en varios megabytes de texto que hay que generar, cruzar y parsear.

Las tres salidas, otra vez de peor a mejor:

Codificar en texto. Una cadena en base64. Simple, universal, y crece el dato un tercio más el coste de codificar y decodificar. Bien para lo pequeño: un icono, una miniatura, una firma.

El tipo de bytes que el framework reconoce. Tauri sabe cruzar datos binarios sin pasarlos por texto, y llegan al frontend como un búfer que el motor entiende. Es la respuesta para datos medianos y la que hay que buscar antes de resignarse a base64.

No cruzarlos. Y sigue siendo la mejor. Una imagen del disco se sirve por el protocolo de recursos del nivel 7.4 y se pone su URL en la etiqueta correspondiente: el motor la carga, la cachea y la decodifica él, sin puente y sin copia.