function udpPacket
udpPacket(): Coder<UdpPacket>

Creates a coder for UDP datagrams (RFC 768).

The returned coder encodes/decodes the 8-byte UDP header followed by a payload whose length is derived from the header's length field (payload.length === length - 8).

Neither length nor checksum are computed for you on encode — the value you provide is written verbatim. This keeps the package layer-agnostic: the UDP checksum is defined over an IPv4 or IPv6 pseudo-header that this coder cannot see, and recomputing length would hide truncation bugs.

Examples

Round-trip a small datagram

import { assertEquals } from "@std/assert";
import { udpPacket, UDP_HEADER_SIZE } from "@binstruct/udp";

const coder = udpPacket();
const payload = new Uint8Array([0x01, 0x02, 0x03]);
const datagram = {
  srcPort: 1234,
  dstPort: 53,
  length: UDP_HEADER_SIZE + payload.length,
  checksum: 0xabcd,
  payload,
};

const buffer = new Uint8Array(32);
const written = coder.encode(datagram, buffer);
const [decoded, read] = coder.decode(buffer.subarray(0, written));

assertEquals(written, UDP_HEADER_SIZE + payload.length);
assertEquals(read, written);
assertEquals(decoded.payload, payload);

Empty payload (8-byte datagram)

import { assertEquals } from "@std/assert";
import { udpPacket, UDP_HEADER_SIZE } from "@binstruct/udp";

const coder = udpPacket();
const buffer = new Uint8Array(UDP_HEADER_SIZE);
const written = coder.encode({
  srcPort: 0,
  dstPort: 0,
  length: UDP_HEADER_SIZE,
  checksum: 0,
  payload: new Uint8Array(0),
}, buffer);
const [decoded] = coder.decode(buffer);

assertEquals(written, UDP_HEADER_SIZE);
assertEquals(decoded.payload.length, 0);

Return Type

Coder<UdpPacket>

A coder for UdpPacket values

Usage

import { udpPacket } from ".";