std/msgpack ofrece una alternativa binaria compacta a JSON. Cada valor se empaqueta en una cadena binaria que preserva su tipo. Encaja bien en formatos en disco y en protocolos de red donde cada byte cuenta.
// MessagePack binary serialization — compact alternative to JSON // Serialización binaria MessagePack — alternativa compacta a JSON import "std/msgpack" fn main() -> int { // Pack individual values let packed_int: String = msgpack_int(42) let packed_str: String = msgpack_str("hello") let packed_bool: String = msgpack_bool(true) let packed_nil: String = msgpack_nil() // Check types print("int type: " + msgpack_type(packed_int)) print("str type: " + msgpack_type(packed_str)) print("bool type: " + msgpack_type(packed_bool)) print("nil type: " + msgpack_type(packed_nil)) // Unpack values let val_int: int = msgpack_unpack_int(packed_int) let val_str: String = msgpack_unpack_str(packed_str) print("unpacked int: " + int_to_string(val_int)) print("unpacked str: " + val_str) // Pack an array of msgpack values let items: Array = [msgpack_int(1), msgpack_str("two"), msgpack_bool(false)] let packed_arr: String = msgpack_array(items) print("array type: " + msgpack_type(packed_arr)) return 0 }
int type: int str type: str bool type: bool_true nil type: nil unpacked int: 42 unpacked str: hello array type: int
Cómo funciona
MessagePack codifica cada valor en una representación binaria compacta. Los enteros pequeños (0-127) caben en un solo byte, las cadenas cortas usan un encabezado de 1 byte, y los booleanos/nil siempre ocupan 1 byte. La función msgpack_type inspecciona el primer byte para determinar qué tipo de valor está almacenado.
msgpack_array toma un array de valores ya empaquetados y antepone un encabezado de array. Esto permite construir estructuras anidadas de forma arbitraria: primero se empaquetan los valores individuales y luego se componen en arrays. El byte del encabezado se emite a través del empaquetador de enteros, así que msgpack_type reporta int para el array compuesto en vez de array — si necesitas distinguirlos, lee el prefijo de longitud por tu cuenta.
Las funciones de pack/unpack operan sobre strings de Nyx (que son secuencias de bytes), lo que las hace compatibles con transmisión por red y almacenamiento en archivos sin codificación adicional.