dnsbase
Copyright(c) Viktor Dukhovni 2026
LicenseBSD-3-Clause
Maintainerietf-dane@dukhovni.org
Stabilityunstable
Safe HaskellNone
LanguageGHC2024

Net.DNSBase.Present

Description

The Presentable typeclass renders DNS data into the conventional zone-file textual form (RFC 1035 section 5, with later refinements). Instances produce Builder fragments, which are stitched together by the small combinator set (presentSp, presentCharSep, presentLn, and friends) for separators and line breaks. presentString and presentStrict run the builder to a String or strict ByteString for final output; putBuilder writes a builder to stdout.

The Epoch64 newtype renders a 64-bit absolute time as the RFC 4034 14-digit YYYYMMDDHHmmSS string used in RRSIG timestamps.

Synopsis

Documentation

class Presentable a where Source #

Return DNS presentation form, as a lazy ByteString builder, taking a continuation. Since DNS record presentation form is ASCII, we don't need Unicode strings, and lazy ByteString builders perform one to two orders of magnitude faster.

Complex builders with nested sub-components are much more efficient when constructed in continuation passing style.

Minimal complete definition

present

Methods

present Source #

Arguments

:: a

Value to serialise

-> Builder

Continuation

-> Builder

Final output

Serialise the input value with the given continuation.

presentLazy Source #

Arguments

:: a

Value to serialise

-> ByteString

Lazy bytestring suffix

-> ByteString

Final output

Run the builder immediately, producing a lazy ByteString with the given tail.

Instances

Instances details
Presentable Builder Source # 
Instance details

Defined in Net.DNSBase.Internal.Present

Presentable ByteString Source # 
Instance details

Defined in Net.DNSBase.Internal.Present

Presentable ShortByteString Source #

Append a ShortByteString assumed already escaped to not require additional escaping or quoting.

Instance details

Defined in Net.DNSBase.Internal.Present

Presentable OptNum Source # 
Instance details

Defined in Net.DNSBase.EDNS.Internal.OptNum

Presentable EdnsOption Source # 
Instance details

Defined in Net.DNSBase.EDNS.Internal.Option

Presentable O_ecs Source # 
Instance details

Defined in Net.DNSBase.EDNS.Option.ECS

Presentable O_ede Source #

Presentation form modelled after BIND dig:

9 (DNSKEY Missing): "no SEP matching the DS found for dnssec-failed.org."

The numeric code is always shown. The friendly name (parenthesised, raw — registry tags don't need quoting) and trailing colon+text (DNS text quoting applied — the EXTRA-TEXT is free-form payload) appear when present; an unregistered code with no extra text renders as just the bare number.

Instance details

Defined in Net.DNSBase.EDNS.Option.EDE

Presentable O_nsid Source # 
Instance details

Defined in Net.DNSBase.EDNS.Option.NSID

Presentable O_dau Source # 
Instance details

Defined in Net.DNSBase.EDNS.Option.Secalgs

Presentable O_dhu Source # 
Instance details

Defined in Net.DNSBase.EDNS.Option.Secalgs

Presentable O_n3u Source # 
Instance details

Defined in Net.DNSBase.EDNS.Option.Secalgs

Presentable Bytes16 Source # 
Instance details

Defined in Net.DNSBase.Internal.Bytes

Presentable Bytes32 Source # 
Instance details

Defined in Net.DNSBase.Internal.Bytes

Presentable Bytes64 Source # 
Instance details

Defined in Net.DNSBase.Internal.Bytes

Presentable DnsTriple Source # 
Instance details

Defined in Net.DNSBase.Internal.Domain

Presentable Domain Source #

Conversion to presentation form via a bytestring Builder.

Instance details

Defined in Net.DNSBase.Internal.Domain

Presentable Host Source #

Conversion to presentation form via a bytestring Builder.

Instance details

Defined in Net.DNSBase.Internal.Domain

Presentable Mbox Source #

Conversion to presentation form via a bytestring Builder.

Instance details

Defined in Net.DNSBase.Internal.Domain

Presentable DecodeContext Source # 
Instance details

Defined in Net.DNSBase.Internal.Error

Presentable DnsSection Source # 
Instance details

Defined in Net.DNSBase.Internal.Error

Presentable DNSFlags Source #

Output the names of the flags set. If none set, outputs a dash: -.

Instance details

Defined in Net.DNSBase.Internal.Flags

Presentable Opcode Source #

The Presentable instance outputs BIND-compatible names.

Instance details

Defined in Net.DNSBase.Internal.Opcode

Presentable DnsXprt Source # 
Instance details

Defined in Net.DNSBase.Internal.Peer

Presentable MessageSource Source # 
Instance details

Defined in Net.DNSBase.Internal.Peer

Presentable Epoch64 Source # 
Instance details

Defined in Net.DNSBase.Internal.Present

Presentable RCODE Source # 
Instance details

Defined in Net.DNSBase.Internal.RCODE

Presentable RData Source #

Presents the type and value, space-separated.

Instance details

Defined in Net.DNSBase.Internal.RData

Presentable RR Source # 
Instance details

Defined in Net.DNSBase.Internal.RR

Presentable RRCLASS Source # 
Instance details

Defined in Net.DNSBase.Internal.RRCLASS

Presentable RRTYPE Source # 
Instance details

Defined in Net.DNSBase.Internal.RRTYPE

Presentable DnsText Source # 
Instance details

Defined in Net.DNSBase.Internal.Text

Presentable DnsUtf8Text Source # 
Instance details

Defined in Net.DNSBase.Internal.Text

Presentable NsecTypes Source #

Presentation form: contained types in canonical wire-form order, space-separated, with no leading separator. The empty bitmap renders as the empty string. When the bitmap follows another field in an RR's presentation form, compose with presentSp or presentLn to prefix the appropriate separator.

Instance details

Defined in Net.DNSBase.NsecTypes

Presentable NxtRRtype Source # 
Instance details

Defined in Net.DNSBase.NsecTypes

Presentable NxtTypes Source # 
Instance details

Defined in Net.DNSBase.NsecTypes

Presentable T_a Source # 
Instance details

Defined in Net.DNSBase.RData.A

Presentable T_aaaa Source # 
Instance details

Defined in Net.DNSBase.RData.A

Presentable T_caa Source # 
Instance details

Defined in Net.DNSBase.RData.CAA

Presentable Dscheme Source # 
Instance details

Defined in Net.DNSBase.RData.CSYNC

Presentable T_csync Source # 
Instance details

Defined in Net.DNSBase.RData.CSYNC

Presentable T_dsync Source # 
Instance details

Defined in Net.DNSBase.RData.CSYNC

Presentable IPSecKeyGateway Source # 
Instance details

Defined in Net.DNSBase.RData.Dnssec

Presentable T_ipseckey Source # 
Instance details

Defined in Net.DNSBase.RData.Dnssec

Presentable T_zonemd Source # 
Instance details

Defined in Net.DNSBase.RData.Dnssec

Presentable T_dname Source #

Presentation form preserves case.

Instance details

Defined in Net.DNSBase.RData.Internal.XNAME

Presentable T_nsec Source # 
Instance details

Defined in Net.DNSBase.RData.NSEC

Presentable T_nsec3 Source # 
Instance details

Defined in Net.DNSBase.RData.NSEC

Presentable T_nsec3param Source # 
Instance details

Defined in Net.DNSBase.RData.NSEC

Presentable T_nxt Source # 
Instance details

Defined in Net.DNSBase.RData.NSEC

Presentable T_a6 Source # 
Instance details

Defined in Net.DNSBase.RData.Obsolete

Presentable T_gpos Source # 
Instance details

Defined in Net.DNSBase.RData.Obsolete

Presentable T_isdn Source # 
Instance details

Defined in Net.DNSBase.RData.Obsolete

Presentable T_kx Source # 
Instance details

Defined in Net.DNSBase.RData.Obsolete

Presentable T_minfo Source # 
Instance details

Defined in Net.DNSBase.RData.Obsolete

Presentable T_nsap Source # 
Instance details

Defined in Net.DNSBase.RData.Obsolete

Presentable T_nsapptr Source # 
Instance details

Defined in Net.DNSBase.RData.Obsolete

Presentable T_px Source # 
Instance details

Defined in Net.DNSBase.RData.Obsolete

Presentable T_rt Source # 
Instance details

Defined in Net.DNSBase.RData.Obsolete

Presentable T_x25 Source # 
Instance details

Defined in Net.DNSBase.RData.Obsolete

Presentable T_rp Source # 
Instance details

Defined in Net.DNSBase.RData.SOA

Presentable T_soa Source # 
Instance details

Defined in Net.DNSBase.RData.SOA

Presentable T_afsdb Source # 
Instance details

Defined in Net.DNSBase.RData.SRV

Presentable T_amtrelay Source # 
Instance details

Defined in Net.DNSBase.RData.SRV

Presentable T_l32 Source # 
Instance details

Defined in Net.DNSBase.RData.SRV

Presentable T_lp Source # 
Instance details

Defined in Net.DNSBase.RData.SRV

Presentable T_mx Source # 
Instance details

Defined in Net.DNSBase.RData.SRV

Presentable T_naptr Source # 
Instance details

Defined in Net.DNSBase.RData.SRV

Presentable T_srv Source # 
Instance details

Defined in Net.DNSBase.RData.SRV

Presentable SPV_alpn Source # 
Instance details

Defined in Net.DNSBase.RData.SVCB.SPV

Presentable SPV_docpath Source # 
Instance details

Defined in Net.DNSBase.RData.SVCB.SPV

Presentable SPV_dohpath Source # 
Instance details

Defined in Net.DNSBase.RData.SVCB.SPV

Presentable SPV_ech Source # 
Instance details

Defined in Net.DNSBase.RData.SVCB.SPV

Presentable SPV_ipv4hint Source # 
Instance details

Defined in Net.DNSBase.RData.SVCB.SPV

Presentable SPV_ipv6hint Source # 
Instance details

Defined in Net.DNSBase.RData.SVCB.SPV

Presentable SPV_mandatory Source # 
Instance details

Defined in Net.DNSBase.RData.SVCB.SPV

Presentable SPV_ndalpn Source # 
Instance details

Defined in Net.DNSBase.RData.SVCB.SPV

Presentable SPV_port Source # 
Instance details

Defined in Net.DNSBase.RData.SVCB.SPV

Presentable SPV_pvd Source # 
Instance details

Defined in Net.DNSBase.RData.SVCB.SPV

Presentable SPV_tlsgroups Source # 
Instance details

Defined in Net.DNSBase.RData.SVCB.SPV

Presentable SPVSet Source # 
Instance details

Defined in Net.DNSBase.RData.SVCB.SPVSet

Presentable SVCParamKey Source # 
Instance details

Defined in Net.DNSBase.RData.SVCB.SVCParamKey

Presentable SVCParamValue Source # 
Instance details

Defined in Net.DNSBase.RData.SVCB.SVCParamValue

Presentable T_openpgpkey Source # 
Instance details

Defined in Net.DNSBase.RData.TLSA

Presentable T_sshfp Source # 
Instance details

Defined in Net.DNSBase.RData.TLSA

Presentable T_hinfo Source # 
Instance details

Defined in Net.DNSBase.RData.TXT

Presentable T_null Source # 
Instance details

Defined in Net.DNSBase.RData.TXT

Presentable T_txt Source # 
Instance details

Defined in Net.DNSBase.RData.TXT

Presentable T_wks Source # 
Instance details

Defined in Net.DNSBase.RData.WKS

Presentable WksProto Source # 
Instance details

Defined in Net.DNSBase.RData.WKS

Presentable DNSKEYAlg Source # 
Instance details

Defined in Net.DNSBase.Secalgs

Presentable DSHashAlg Source # 
Instance details

Defined in Net.DNSBase.Secalgs

Presentable DaneMtype Source # 
Instance details

Defined in Net.DNSBase.Secalgs

Presentable DaneSelector Source # 
Instance details

Defined in Net.DNSBase.Secalgs

Presentable DaneUsage Source # 
Instance details

Defined in Net.DNSBase.Secalgs

Presentable NSEC3HashAlg Source # 
Instance details

Defined in Net.DNSBase.Secalgs

Presentable SshHashType Source # 
Instance details

Defined in Net.DNSBase.Secalgs

Presentable SshKeyAlgorithm Source # 
Instance details

Defined in Net.DNSBase.Secalgs

Presentable Int16 Source # 
Instance details

Defined in Net.DNSBase.Internal.Present

Presentable Int32 Source # 
Instance details

Defined in Net.DNSBase.Internal.Present

Presentable Int64 Source # 
Instance details

Defined in Net.DNSBase.Internal.Present

Presentable Int8 Source # 
Instance details

Defined in Net.DNSBase.Internal.Present

Presentable Word16 Source # 
Instance details

Defined in Net.DNSBase.Internal.Present

Presentable Word32 Source # 
Instance details

Defined in Net.DNSBase.Internal.Present

Presentable Word64 Source # 
Instance details

Defined in Net.DNSBase.Internal.Present

Presentable Word8 Source # 
Instance details

Defined in Net.DNSBase.Internal.Present

Presentable IP Source # 
Instance details

Defined in Net.DNSBase.Internal.Present

Presentable IPv4 Source # 
Instance details

Defined in Net.DNSBase.Internal.Present

Presentable IPv6 Source # 
Instance details

Defined in Net.DNSBase.Internal.Present

Presentable String Source #

Append a string, assumed ASCII.

Instance details

Defined in Net.DNSBase.Internal.Present

Presentable Char Source #

Append a char, assumed 8-bit only.

Instance details

Defined in Net.DNSBase.Internal.Present

Presentable Int Source # 
Instance details

Defined in Net.DNSBase.Internal.Present

Presentable (OpaqueOption n) Source # 
Instance details

Defined in Net.DNSBase.EDNS.Internal.Option.Opaque

Presentable (OpaqueRData n) Source # 
Instance details

Defined in Net.DNSBase.Internal.RData

KnownSymbol (XdsConName n) => Presentable (X_ds n) Source # 
Instance details

Defined in Net.DNSBase.RData.Dnssec

KnownSymbol (XkeyConName n) => Presentable (X_key n) Source # 
Instance details

Defined in Net.DNSBase.RData.Dnssec

KnownSymbol (XsigConName n) => Presentable (X_sig n) Source # 
Instance details

Defined in Net.DNSBase.RData.Dnssec

Presentable (X_domain f) Source #

Presentation form preserves case.

Instance details

Defined in Net.DNSBase.RData.Internal.XNAME

KnownSymbol (XnidConName n) => Presentable (X_nid n) Source # 
Instance details

Defined in Net.DNSBase.RData.SRV

Presentable (X_svcb n) Source # 
Instance details

Defined in Net.DNSBase.RData.SVCB

Nat16 n => Presentable (OpaqueSPV n) Source # 
Instance details

Defined in Net.DNSBase.RData.SVCB.SVCParamValue

KnownSymbol (XtlsaConName n) => Presentable (X_tlsa n) Source # 
Instance details

Defined in Net.DNSBase.RData.TLSA

Builder combinators

presentByte :: Word8 -> Builder -> Builder Source #

Prepend a single literal byte to a continuation builder. The workhorse separator primitive that the other combinators (presentSep, presentSp, presentLn, ...) are built on.

presentCharSep :: Presentable a => Char -> a -> Builder -> Builder Source #

Append with a leading Char octet separator

presentCharSepLn :: Presentable a => Char -> a -> Builder -> Builder Source #

Append with a leading separator and a trailing newline

presentLn :: Presentable a => a -> Builder -> Builder Source #

Append the presentation of a followed by a newline (\n, 0x0a). Use this to terminate each record when emitting a zone-file-style stream, as in foldr presentLn mempty records.

presentSep :: Presentable a => Word8 -> a -> Builder -> Builder Source #

Append with a leading separator

presentSepLn :: Presentable a => Word8 -> a -> Builder -> Builder Source #

Append with a leading separator and a trailing newline

presentSp :: Presentable a => a -> Builder -> Builder Source #

Append with a leading space

presentSpLn :: Presentable a => a -> Builder -> Builder Source #

Append with a leading space and a trailing newline

Newtype to present 64-bit epoch times.

newtype Epoch64 Source #

64-bit extended representation of 32-bit DNS clock-arithmetic types. The presentation form is as a YYYYMMDDHHMMSS string.

Constructors

Epoch64 Int64 

Instances

Instances details
Presentable Epoch64 Source # 
Instance details

Defined in Net.DNSBase.Internal.Present

IsString Epoch64 Source #

Parse DNSSEC YYYYmmddHHMMSS time format to Epoch64 value

Instance details

Defined in Net.DNSBase.Internal.Present

Methods

fromString :: String -> Epoch64 #

Bounded Epoch64 Source # 
Instance details

Defined in Net.DNSBase.Internal.Present

Enum Epoch64 Source # 
Instance details

Defined in Net.DNSBase.Internal.Present

Num Epoch64 Source # 
Instance details

Defined in Net.DNSBase.Internal.Present

Integral Epoch64 Source # 
Instance details

Defined in Net.DNSBase.Internal.Present

Real Epoch64 Source # 
Instance details

Defined in Net.DNSBase.Internal.Present

Show Epoch64 Source # 
Instance details

Defined in Net.DNSBase.Internal.Present

Eq Epoch64 Source # 
Instance details

Defined in Net.DNSBase.Internal.Present

Methods

(==) :: Epoch64 -> Epoch64 -> Bool #

(/=) :: Epoch64 -> Epoch64 -> Bool #

Ord Epoch64 Source # 
Instance details

Defined in Net.DNSBase.Internal.Present

Build directly to a String or ByteString

presentString :: Presentable a => a -> String -> String Source #

Immediately construct a String from the input followed by the given tail.

presentStrict :: Presentable a => a -> ByteString -> ByteString Source #

Immediately construct a strict ByteString from the input followed by the given lazy ByteString tail.

Re-exported from Data.ByteString.Builder

data Builder #

Builders denote sequences of bytes. They are Monoids where mempty is the zero-length sequence and mappend is concatenation, which runs in O(1).

Instances

Instances details
Presentable Builder Source # 
Instance details

Defined in Net.DNSBase.Internal.Present

Monoid Builder # 
Instance details

Defined in Data.ByteString.Builder.Internal

Semigroup Builder # 
Instance details

Defined in Data.ByteString.Builder.Internal

IsString Builder # 
Instance details

Defined in Data.ByteString.Builder

Methods

fromString :: String -> Builder #

IsList Builder #

For long or infinite lists use fromList because it uses LazyByteString otherwise use fromListN which uses StrictByteString.

Instance details

Defined in Data.ByteString.Builder.Internal

Associated Types

type Item Builder 
Instance details

Defined in Data.ByteString.Builder.Internal

Show Builder #

Since: bytestring-0.11.1.0

Instance details

Defined in Data.ByteString.Builder

type Item Builder # 
Instance details

Defined in Data.ByteString.Builder.Internal

hPutBuilder :: Handle -> Builder -> IO () #

Output a Builder to a Handle. The Builder is executed directly on the buffer of the Handle. If the buffer is too small (or not present), then it is replaced with a large enough buffer.

It is recommended that the Handle is set to binary and BlockBuffering mode. See hSetBinaryMode and hSetBuffering.

This function is more efficient than hPut . toLazyByteString because in many cases no buffer allocation has to be done. Moreover, the results of several executions of short Builders are concatenated in the Handles buffer, therefore avoiding unnecessary buffer flushes.

hPutBuilder specialised to stdout

putBuilder :: Builder -> IO () Source #

Execute the Builder writing output to IO.stdout. Typically, stdout should be set in BinaryMode with BlockBuffering. See hSetBinaryMode and hSetBuffering for details.