Dextrin.Ip (Dextrin v0.3.0)

Copy Markdown View Source

DXN ip (@ip "...", Jan, 2026-10-20): an IPv4 or IPv6 address, or a prefix -- an address and a length. address holds the raw bytes, 4 or 16; prefix is the length, or nil for an address. A prefix's host bits are zero (RFC 9164). In .dxnb it is CBOR's tag 52 or 54, raw bytes.

iex> {:ok, ip} = Dextrin.Ip.parse("2001:DB8:0:0::/32")
iex> Dextrin.Ip.format(ip)
"2001:db8::/32"

Summary

Functions

IPv4 in dotted decimal, IPv6 as RFC 5952 writes it, then /length for a prefix.

A value from raw address bytes and an optional prefix length, checked.

Parses an address, or address/length.

4 or 6.

Types

t()

@type t() :: %Dextrin.Ip{address: binary(), prefix: nil | non_neg_integer()}

Functions

format(ip)

@spec format(t()) :: String.t()

IPv4 in dotted decimal, IPv6 as RFC 5952 writes it, then /length for a prefix.

new(address, prefix \\ nil)

@spec new(binary(), nil | non_neg_integer()) :: {:ok, t()} | {:error, :invalid_ip}

A value from raw address bytes and an optional prefix length, checked.

parse(text)

@spec parse(String.t()) :: {:ok, t()} | {:error, :invalid_ip}

Parses an address, or address/length.

version(ip)

@spec version(t()) :: 4 | 6

4 or 6.