Referencia Zigspire-zig (SDK consumido)

zig/src/frame.zig

Declaraciones públicas de zig/src/frame.zig (spire-zig (SDK consumido)).

ImplementadoSin versión del tren todavía· generada desde apps/docs/generated/zig/spire.json

Página generada desde spire@spire-0.2.0-XvnrRek1BgCX4Bh8miuITCQgkn0FqeQrYYE3goFfDcQd (zig/src/root.zig). No se edita a mano: bun run docs:gen la regenera y bun run docs:check falla si difiere.

Framing de spire sobre streams (unix socket): u32 BE len ‖ u8 tipo ‖ cuerpo.

Es el mismo marco que ya usaba el IPC de control de styx (protocols/session-ipc: 4 bytes de longitud del cuerpo, 1 byte de versión, cuerpo). spire reinterpreta el byte como tipo de frame:

0x01 JSON v1 del IPC antiguo — spire lo reconoce para rechazarlo con un error claro, nunca lo procesa. 0x02 sobre v2 (envelope.zig). 0x20 handshake HELLO (servidor → cliente) 0x21 handshake AUTH (cliente → servidor) 0x22 handshake WELCOME (servidor → cliente)

FrameReader es incremental y no reserva memoria: el llamador le da un buffer fijo de HEADER_LEN + max_body bytes. Una longitud declarada por encima de max_body es un error antes de leer el cuerpo (nadie puede hacer que el lector espere 4 GiB).

frame.HEADER_LEN

const · línea 23

pub const HEADER_LEN: usize = 5

Sin ///.

frame.HARD_MAX_BODY

const · línea 25

pub const HARD_MAX_BODY: u32 = 1 << 20

Techo duro del cuerpo (dec-0119 §7): el mismo 1 MiB del IPC anterior.

frame.FrameType

type · línea 27

pub const FrameType = enum

Sin ///.

frame.FrameType.fromByte

fn · línea 34

pub fn fromByte(b: u8) ?FrameType

Sin ///.

frame.Frame

type · línea 39

pub const Frame = struct

Sin ///.

frame.Error

const · línea 46

pub const Error = error{ /// La longitud declarada supera el máximo del lector. FrameTooLarge, /// Tipo de frame desconocido. UnknownFrameType, /// Frame de la versión JSON v1 del IPC antiguo. Legac …

Sin ///.

frame.writeHeader

fn · línea 56

pub fn writeHeader(out: *[HEADER_LEN]u8, ftype: FrameType, body_len: usize) error{FrameTooLarge}!void

Escribe la cabecera de un frame con cuerpo de body_len bytes.

frame.FrameReader

type · línea 62

pub const FrameReader = struct

Sin ///.

frame.FrameReader.init

fn · línea 71

pub fn init(buf: []u8, max_body: u32) FrameReader

buf.len debe ser al menos HEADER_LEN + max_body.

frame.FrameReader.writable

fn · línea 79

pub fn writable(self: *FrameReader) []u8

Espacio libre donde leer más bytes del socket. Invalida el último Frame devuelto (compacta el buffer).

frame.FrameReader.advance

fn · línea 90

pub fn advance(self: *FrameReader, n: usize) void

Marca n bytes de writable() como leídos.

frame.FrameReader.next

fn · línea 96

pub fn next(self: *FrameReader) Error!?Frame

Siguiente frame completo, o null si faltan bytes.

frame.FrameReader.pendingBytes

fn · línea 109

pub fn pendingBytes(self: *const FrameReader) usize

Bytes recibidos sin completar un frame (para detectar cierres a medias).