Nyx con Ejemplos

MessagePack

std/msgpack ofrece serialización binaria que es aproximadamente un 30% más compacta que JSON para datos típicos. Cada valor se empaqueta en una cadena binaria compacta que preserva su tipo. Esto se usa internamente en nyx-kv para su formato de persistencia .ndb.

Código

// MessagePack binary serialization

import "std/msgpack"

fn main() -> int {
    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()

    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))

    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)

    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
}

Salida

int type:  positive_int
str type:  str
bool type: bool_true
nil type:  nil
unpacked int: 42
unpacked str: hello
array type: array

Explicación

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.

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.

← Anterior Siguiente →

Source: examples/by-example/44-msgpack.nx