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

Net.DNSBase.RData

Description

The existential RData wrapper holds any KnownRData instance, so a heterogeneous list of records — an answer section, a zone — can share a single Haskell type. fromRData and rdataType recover the underlying value or its type code; monoRData is the bulk form, filtering a list of RData values by type.

Unrecognised RR types decode into OpaqueRData, which preserves the raw wire bytes under a type-level codepoint and presents in the generic RFC 3597 #-prefixed form.

Advanced applications can add support for any missing RR types, not yet supported by the library, by implementing a corresponding KnownRData instance and exposing it to the resolver via registerRRtype (see Net.DNSBase.Resolver). KnownRData carries any per-type extension value (RDataExtensionVal) the codec consumes. RR types that admit type-driven extension (presently, just SVCB and HTTPS) also implement a TypeExtensible instance whose extendByType method is invoked by extendRRwithType.

The encoder and decoder combinator modules are re-exported for the benefit of authors of new KnownRData instances; ordinary callers do not need them.

Synopsis

Basic RData API

data RData Source #

Wrapper around any concrete KnownRData type.

Its presentation form includes both the type and the value, space-separated. The underlying concrete types present just their values.

Constructors

KnownRData a => RData a 

Instances

Instances details
Presentable RData Source #

Presents the type and value, space-separated.

Instance details

Defined in Net.DNSBase.Internal.RData

Show RData Source # 
Instance details

Defined in Net.DNSBase.Internal.RData

Methods

showsPrec :: Int -> RData -> ShowS #

show :: RData -> String #

showList :: [RData] -> ShowS #

Eq RData Source # 
Instance details

Defined in Net.DNSBase.Internal.RData

Methods

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

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

Ord RData Source #

Compare RData first by RRtype number, then by content. When two RRtype numbers match, but the data types nevertheless differ, order opaque type after non-opaque. In the unlikely case of two non-opaque types with the same RRtype, compare their opaque encodings (this could throw an error if one of the objects is not encodable, perhaps because encoding would be too long).

Instance details

Defined in Net.DNSBase.Internal.RData

Methods

compare :: RData -> RData -> Ordering #

(<) :: RData -> RData -> Bool #

(<=) :: RData -> RData -> Bool #

(>) :: RData -> RData -> Bool #

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

max :: RData -> RData -> RData #

min :: RData -> RData -> RData #

fromRData :: KnownRData a => RData -> Maybe a Source #

Recover a typed RR payload from the existential RData wrapper. Returns Just x when the dynamic payload's type matches the caller's expected type a, and Nothing otherwise.

The target type is selected by the result-side pattern; once there's a concrete constructor on the Just side, the KnownRData a constraint is resolved without an explicit type ascription. A typical use is a view-pattern dispatch that handles two or more RR types at once:

evalIP :: (IP -> a) -> RData -> Maybe a
evalIP f (fromRData -> Just (T_A    ip)) = Just $! f (IPv4 ip)
evalIP f (fromRData -> Just (T_AAAA ip)) = Just $! f (IPv6 ip)
evalIP _ _                               = Nothing

fromRData is the right tool when the value in hand is already an RData. If you instead have an RR (or a list of them, as returned by lookupAnswers), rrDataCast is the convenience composition fromRData . rrData. And monoRData performs the filter-and-cast over a Foldable container in one step.

monoRData :: (KnownRData a, Foldable t) => t RData -> [a] Source #

Filter a Foldable of RData down to the elements whose payload type matches the caller's target a, returning a monomorphic list of those typed values. Elements with a different payload type are dropped.

For example, the T_mx payloads from a mixed RData list:

mxs :: [RData] -> [T_mx]
mxs = monoRData

Equivalent to mapMaybe fromRData . toList, but in one fused pass. See fromRData for the single-element cast, and rrDataCast for the RR-input analogue.

Opaque RData

data OpaqueRData (n :: Nat) Source #

Opaque RData, for RRTYPEs not known at runtime

Constructors

Nat16 n => OpaqueRData ShortByteString 

Instances

Instances details
Presentable (OpaqueRData n) Source # 
Instance details

Defined in Net.DNSBase.Internal.RData

Nat16 n => KnownRData (OpaqueRData n) Source # 
Instance details

Defined in Net.DNSBase.Internal.RData

Associated Types

type RDataExtensionVal (OpaqueRData n) 
Instance details

Defined in Net.DNSBase.Internal.RData

Show (OpaqueRData n) Source # 
Instance details

Defined in Net.DNSBase.Internal.RData

Eq (OpaqueRData n) Source # 
Instance details

Defined in Net.DNSBase.Internal.RData

Ord (OpaqueRData n) Source # 
Instance details

Defined in Net.DNSBase.Internal.RData

type RDataExtensionVal (OpaqueRData n) Source # 
Instance details

Defined in Net.DNSBase.Internal.RData

opaqueRData :: Word16 -> ShortByteString -> RData Source #

Create opaque RData from its type number and Bytes16 value

toOpaqueRData :: RData -> Either (EncodeErr (Maybe RData)) RData Source #

Convert RData to its opaque equivalent of the same RRtype. OpaqueRData values will be returned as-is. Otherwise, this will attempt to encode the record without name compression, the encoding may fail, in which case the return value will be Nothing.

fromOpaqueRData :: ResolvSeed -> RData -> Either DNSError RData Source #

Convert RData to its Known equivalent of the same RRtype using the types known in the provided ResolvSeed. If the input value is already non-opaque, or if there's no entry for the RRTYPE in the provided ResolvSeed, the input will be returned as-is.

Otherwise, this will attempt to decode the opaque record without name compression, the decode may fail, and an error reason returned instead.

Extensibility

class (Typeable a, Eq a, Ord a, Show a, Presentable a) => KnownRData a where Source #

Abstract DNS Resource Record (type-specific) data.

The decoding, encoding and presentation functions are responsible for just the value, presentation of the associated RR type defaults to the built-in names, for novel types override rdTypePres.

The Show instance is typically derived, and will output the type constructor (its output strives to produce syntactically valid Haskell values), in contrast with Presentable which produces RFC-standard presentation forms.

Minimal complete definition

rdType, rdDecode, rdEncode

Associated Types

type RDataExtensionVal a Source #

The codec-consumed extension value for type a. Defaults to (). Types with non-trivial extension data (SVCB and HTTPS, which carry the SvcParam decoder map) supply their own associated-type definition.

type RDataExtensionVal a = ()

Methods

rdataExtensionVal :: forall b -> b ~ a => RDataExtensionVal a Source #

The library's built-in starting RDataExtensionVal for type a. Used as the baseline when the library installs its built-in registration for a, and as the starting point when the user extends the codec for a. For RDataExtensionVal a ~ () types the class default applies.

default rdataExtensionVal :: RDataExtensionVal a ~ () => forall b -> b ~ a => RDataExtensionVal a Source #

rdType :: forall b -> b ~ a => RRTYPE Source #

rdTypePres :: forall b -> b ~ a => Builder -> Builder Source #

rdDecode :: forall b -> b ~ a => RDataExtensionVal a -> Int -> SGet RData Source #

rdEncode :: a -> SPut s RData Source #

cnEncode :: a -> SPut s RData Source #

Instances

Instances details
KnownRData T_a Source # 
Instance details

Defined in Net.DNSBase.RData.A

Associated Types

type RDataExtensionVal T_a 
Instance details

Defined in Net.DNSBase.RData.A

Methods

rdataExtensionVal :: forall b -> b ~ T_a => RDataExtensionVal T_a Source #

rdType :: forall b -> b ~ T_a => RRTYPE Source #

rdTypePres :: forall b -> b ~ T_a => Builder -> Builder Source #

rdDecode :: forall b -> b ~ T_a => RDataExtensionVal T_a -> Int -> SGet RData Source #

rdEncode :: T_a -> SPut s RData Source #

cnEncode :: T_a -> SPut s RData Source #

KnownRData T_aaaa Source # 
Instance details

Defined in Net.DNSBase.RData.A

Associated Types

type RDataExtensionVal T_aaaa 
Instance details

Defined in Net.DNSBase.RData.A

KnownRData T_caa Source # 
Instance details

Defined in Net.DNSBase.RData.CAA

Associated Types

type RDataExtensionVal T_caa 
Instance details

Defined in Net.DNSBase.RData.CAA

Methods

rdataExtensionVal :: forall b -> b ~ T_caa => RDataExtensionVal T_caa Source #

rdType :: forall b -> b ~ T_caa => RRTYPE Source #

rdTypePres :: forall b -> b ~ T_caa => Builder -> Builder Source #

rdDecode :: forall b -> b ~ T_caa => RDataExtensionVal T_caa -> Int -> SGet RData Source #

rdEncode :: T_caa -> SPut s RData Source #

cnEncode :: T_caa -> SPut s RData Source #

KnownRData T_csync Source # 
Instance details

Defined in Net.DNSBase.RData.CSYNC

Associated Types

type RDataExtensionVal T_csync 
Instance details

Defined in Net.DNSBase.RData.CSYNC

KnownRData T_dsync Source # 
Instance details

Defined in Net.DNSBase.RData.CSYNC

Associated Types

type RDataExtensionVal T_dsync 
Instance details

Defined in Net.DNSBase.RData.CSYNC

KnownRData T_ipseckey Source # 
Instance details

Defined in Net.DNSBase.RData.Dnssec

Associated Types

type RDataExtensionVal T_ipseckey 
Instance details

Defined in Net.DNSBase.RData.Dnssec

KnownRData T_zonemd Source # 
Instance details

Defined in Net.DNSBase.RData.Dnssec

Associated Types

type RDataExtensionVal T_zonemd 
Instance details

Defined in Net.DNSBase.RData.Dnssec

KnownRData T_dname Source #

Name compression used on input only.

Instance details

Defined in Net.DNSBase.RData.Internal.XNAME

Associated Types

type RDataExtensionVal T_dname 
Instance details

Defined in Net.DNSBase.RData.Internal.XNAME

KnownRData T_nsec Source # 
Instance details

Defined in Net.DNSBase.RData.NSEC

Associated Types

type RDataExtensionVal T_nsec 
Instance details

Defined in Net.DNSBase.RData.NSEC

KnownRData T_nsec3 Source # 
Instance details

Defined in Net.DNSBase.RData.NSEC

Associated Types

type RDataExtensionVal T_nsec3 
Instance details

Defined in Net.DNSBase.RData.NSEC

KnownRData T_nsec3param Source # 
Instance details

Defined in Net.DNSBase.RData.NSEC

Associated Types

type RDataExtensionVal T_nsec3param 
Instance details

Defined in Net.DNSBase.RData.NSEC

KnownRData T_nxt Source # 
Instance details

Defined in Net.DNSBase.RData.NSEC

Associated Types

type RDataExtensionVal T_nxt 
Instance details

Defined in Net.DNSBase.RData.NSEC

Methods

rdataExtensionVal :: forall b -> b ~ T_nxt => RDataExtensionVal T_nxt Source #

rdType :: forall b -> b ~ T_nxt => RRTYPE Source #

rdTypePres :: forall b -> b ~ T_nxt => Builder -> Builder Source #

rdDecode :: forall b -> b ~ T_nxt => RDataExtensionVal T_nxt -> Int -> SGet RData Source #

rdEncode :: T_nxt -> SPut s RData Source #

cnEncode :: T_nxt -> SPut s RData Source #

KnownRData T_a6 Source # 
Instance details

Defined in Net.DNSBase.RData.Obsolete

Associated Types

type RDataExtensionVal T_a6 
Instance details

Defined in Net.DNSBase.RData.Obsolete

Methods

rdataExtensionVal :: forall b -> b ~ T_a6 => RDataExtensionVal T_a6 Source #

rdType :: forall b -> b ~ T_a6 => RRTYPE Source #

rdTypePres :: forall b -> b ~ T_a6 => Builder -> Builder Source #

rdDecode :: forall b -> b ~ T_a6 => RDataExtensionVal T_a6 -> Int -> SGet RData Source #

rdEncode :: T_a6 -> SPut s RData Source #

cnEncode :: T_a6 -> SPut s RData Source #

KnownRData T_gpos Source # 
Instance details

Defined in Net.DNSBase.RData.Obsolete

Associated Types

type RDataExtensionVal T_gpos 
Instance details

Defined in Net.DNSBase.RData.Obsolete

KnownRData T_isdn Source # 
Instance details

Defined in Net.DNSBase.RData.Obsolete

Associated Types

type RDataExtensionVal T_isdn 
Instance details

Defined in Net.DNSBase.RData.Obsolete

KnownRData T_kx Source # 
Instance details

Defined in Net.DNSBase.RData.Obsolete

Associated Types

type RDataExtensionVal T_kx 
Instance details

Defined in Net.DNSBase.RData.Obsolete

Methods

rdataExtensionVal :: forall b -> b ~ T_kx => RDataExtensionVal T_kx Source #

rdType :: forall b -> b ~ T_kx => RRTYPE Source #

rdTypePres :: forall b -> b ~ T_kx => Builder -> Builder Source #

rdDecode :: forall b -> b ~ T_kx => RDataExtensionVal T_kx -> Int -> SGet RData Source #

rdEncode :: T_kx -> SPut s RData Source #

cnEncode :: T_kx -> SPut s RData Source #

KnownRData T_minfo Source # 
Instance details

Defined in Net.DNSBase.RData.Obsolete

Associated Types

type RDataExtensionVal T_minfo 
Instance details

Defined in Net.DNSBase.RData.Obsolete

KnownRData T_nsap Source # 
Instance details

Defined in Net.DNSBase.RData.Obsolete

Associated Types

type RDataExtensionVal T_nsap 
Instance details

Defined in Net.DNSBase.RData.Obsolete

KnownRData T_nsapptr Source # 
Instance details

Defined in Net.DNSBase.RData.Obsolete

Associated Types

type RDataExtensionVal T_nsapptr 
Instance details

Defined in Net.DNSBase.RData.Obsolete

KnownRData T_px Source # 
Instance details

Defined in Net.DNSBase.RData.Obsolete

Associated Types

type RDataExtensionVal T_px 
Instance details

Defined in Net.DNSBase.RData.Obsolete

Methods

rdataExtensionVal :: forall b -> b ~ T_px => RDataExtensionVal T_px Source #

rdType :: forall b -> b ~ T_px => RRTYPE Source #

rdTypePres :: forall b -> b ~ T_px => Builder -> Builder Source #

rdDecode :: forall b -> b ~ T_px => RDataExtensionVal T_px -> Int -> SGet RData Source #

rdEncode :: T_px -> SPut s RData Source #

cnEncode :: T_px -> SPut s RData Source #

KnownRData T_rt Source # 
Instance details

Defined in Net.DNSBase.RData.Obsolete

Associated Types

type RDataExtensionVal T_rt 
Instance details

Defined in Net.DNSBase.RData.Obsolete

Methods

rdataExtensionVal :: forall b -> b ~ T_rt => RDataExtensionVal T_rt Source #

rdType :: forall b -> b ~ T_rt => RRTYPE Source #

rdTypePres :: forall b -> b ~ T_rt => Builder -> Builder Source #

rdDecode :: forall b -> b ~ T_rt => RDataExtensionVal T_rt -> Int -> SGet RData Source #

rdEncode :: T_rt -> SPut s RData Source #

cnEncode :: T_rt -> SPut s RData Source #

KnownRData T_x25 Source # 
Instance details

Defined in Net.DNSBase.RData.Obsolete

Associated Types

type RDataExtensionVal T_x25 
Instance details

Defined in Net.DNSBase.RData.Obsolete

Methods

rdataExtensionVal :: forall b -> b ~ T_x25 => RDataExtensionVal T_x25 Source #

rdType :: forall b -> b ~ T_x25 => RRTYPE Source #

rdTypePres :: forall b -> b ~ T_x25 => Builder -> Builder Source #

rdDecode :: forall b -> b ~ T_x25 => RDataExtensionVal T_x25 -> Int -> SGet RData Source #

rdEncode :: T_x25 -> SPut s RData Source #

cnEncode :: T_x25 -> SPut s RData Source #

KnownRData T_rp Source # 
Instance details

Defined in Net.DNSBase.RData.SOA

Associated Types

type RDataExtensionVal T_rp 
Instance details

Defined in Net.DNSBase.RData.SOA

Methods

rdataExtensionVal :: forall b -> b ~ T_rp => RDataExtensionVal T_rp Source #

rdType :: forall b -> b ~ T_rp => RRTYPE Source #

rdTypePres :: forall b -> b ~ T_rp => Builder -> Builder Source #

rdDecode :: forall b -> b ~ T_rp => RDataExtensionVal T_rp -> Int -> SGet RData Source #

rdEncode :: T_rp -> SPut s RData Source #

cnEncode :: T_rp -> SPut s RData Source #

KnownRData T_soa Source # 
Instance details

Defined in Net.DNSBase.RData.SOA

Associated Types

type RDataExtensionVal T_soa 
Instance details

Defined in Net.DNSBase.RData.SOA

Methods

rdataExtensionVal :: forall b -> b ~ T_soa => RDataExtensionVal T_soa Source #

rdType :: forall b -> b ~ T_soa => RRTYPE Source #

rdTypePres :: forall b -> b ~ T_soa => Builder -> Builder Source #

rdDecode :: forall b -> b ~ T_soa => RDataExtensionVal T_soa -> Int -> SGet RData Source #

rdEncode :: T_soa -> SPut s RData Source #

cnEncode :: T_soa -> SPut s RData Source #

KnownRData T_afsdb Source # 
Instance details

Defined in Net.DNSBase.RData.SRV

Associated Types

type RDataExtensionVal T_afsdb 
Instance details

Defined in Net.DNSBase.RData.SRV

KnownRData T_amtrelay Source # 
Instance details

Defined in Net.DNSBase.RData.SRV

Associated Types

type RDataExtensionVal T_amtrelay 
Instance details

Defined in Net.DNSBase.RData.SRV

KnownRData T_l32 Source # 
Instance details

Defined in Net.DNSBase.RData.SRV

Associated Types

type RDataExtensionVal T_l32 
Instance details

Defined in Net.DNSBase.RData.SRV

Methods

rdataExtensionVal :: forall b -> b ~ T_l32 => RDataExtensionVal T_l32 Source #

rdType :: forall b -> b ~ T_l32 => RRTYPE Source #

rdTypePres :: forall b -> b ~ T_l32 => Builder -> Builder Source #

rdDecode :: forall b -> b ~ T_l32 => RDataExtensionVal T_l32 -> Int -> SGet RData Source #

rdEncode :: T_l32 -> SPut s RData Source #

cnEncode :: T_l32 -> SPut s RData Source #

KnownRData T_lp Source # 
Instance details

Defined in Net.DNSBase.RData.SRV

Associated Types

type RDataExtensionVal T_lp 
Instance details

Defined in Net.DNSBase.RData.SRV

Methods

rdataExtensionVal :: forall b -> b ~ T_lp => RDataExtensionVal T_lp Source #

rdType :: forall b -> b ~ T_lp => RRTYPE Source #

rdTypePres :: forall b -> b ~ T_lp => Builder -> Builder Source #

rdDecode :: forall b -> b ~ T_lp => RDataExtensionVal T_lp -> Int -> SGet RData Source #

rdEncode :: T_lp -> SPut s RData Source #

cnEncode :: T_lp -> SPut s RData Source #

KnownRData T_mx Source # 
Instance details

Defined in Net.DNSBase.RData.SRV

Associated Types

type RDataExtensionVal T_mx 
Instance details

Defined in Net.DNSBase.RData.SRV

Methods

rdataExtensionVal :: forall b -> b ~ T_mx => RDataExtensionVal T_mx Source #

rdType :: forall b -> b ~ T_mx => RRTYPE Source #

rdTypePres :: forall b -> b ~ T_mx => Builder -> Builder Source #

rdDecode :: forall b -> b ~ T_mx => RDataExtensionVal T_mx -> Int -> SGet RData Source #

rdEncode :: T_mx -> SPut s RData Source #

cnEncode :: T_mx -> SPut s RData Source #

KnownRData T_naptr Source # 
Instance details

Defined in Net.DNSBase.RData.SRV

Associated Types

type RDataExtensionVal T_naptr 
Instance details

Defined in Net.DNSBase.RData.SRV

KnownRData T_srv Source # 
Instance details

Defined in Net.DNSBase.RData.SRV

Associated Types

type RDataExtensionVal T_srv 
Instance details

Defined in Net.DNSBase.RData.SRV

Methods

rdataExtensionVal :: forall b -> b ~ T_srv => RDataExtensionVal T_srv Source #

rdType :: forall b -> b ~ T_srv => RRTYPE Source #

rdTypePres :: forall b -> b ~ T_srv => Builder -> Builder Source #

rdDecode :: forall b -> b ~ T_srv => RDataExtensionVal T_srv -> Int -> SGet RData Source #

rdEncode :: T_srv -> SPut s RData Source #

cnEncode :: T_srv -> SPut s RData Source #

KnownRData T_openpgpkey Source # 
Instance details

Defined in Net.DNSBase.RData.TLSA

Associated Types

type RDataExtensionVal T_openpgpkey 
Instance details

Defined in Net.DNSBase.RData.TLSA

KnownRData T_sshfp Source # 
Instance details

Defined in Net.DNSBase.RData.TLSA

Associated Types

type RDataExtensionVal T_sshfp 
Instance details

Defined in Net.DNSBase.RData.TLSA

KnownRData T_hinfo Source # 
Instance details

Defined in Net.DNSBase.RData.TXT

Associated Types

type RDataExtensionVal T_hinfo 
Instance details

Defined in Net.DNSBase.RData.TXT

KnownRData T_null Source # 
Instance details

Defined in Net.DNSBase.RData.TXT

Associated Types

type RDataExtensionVal T_null 
Instance details

Defined in Net.DNSBase.RData.TXT

KnownRData T_txt Source # 
Instance details

Defined in Net.DNSBase.RData.TXT

Associated Types

type RDataExtensionVal T_txt 
Instance details

Defined in Net.DNSBase.RData.TXT

Methods

rdataExtensionVal :: forall b -> b ~ T_txt => RDataExtensionVal T_txt Source #

rdType :: forall b -> b ~ T_txt => RRTYPE Source #

rdTypePres :: forall b -> b ~ T_txt => Builder -> Builder Source #

rdDecode :: forall b -> b ~ T_txt => RDataExtensionVal T_txt -> Int -> SGet RData Source #

rdEncode :: T_txt -> SPut s RData Source #

cnEncode :: T_txt -> SPut s RData Source #

KnownRData T_wks Source # 
Instance details

Defined in Net.DNSBase.RData.WKS

Associated Types

type RDataExtensionVal T_wks 
Instance details

Defined in Net.DNSBase.RData.WKS

Methods

rdataExtensionVal :: forall b -> b ~ T_wks => RDataExtensionVal T_wks Source #

rdType :: forall b -> b ~ T_wks => RRTYPE Source #

rdTypePres :: forall b -> b ~ T_wks => Builder -> Builder Source #

rdDecode :: forall b -> b ~ T_wks => RDataExtensionVal T_wks -> Int -> SGet RData Source #

rdEncode :: T_wks -> SPut s RData Source #

cnEncode :: T_wks -> SPut s RData Source #

Nat16 n => KnownRData (OpaqueRData n) Source # 
Instance details

Defined in Net.DNSBase.Internal.RData

Associated Types

type RDataExtensionVal (OpaqueRData n) 
Instance details

Defined in Net.DNSBase.Internal.RData

(Nat16 n, KnownSymbol (XdsConName n)) => KnownRData (X_ds n) Source # 
Instance details

Defined in Net.DNSBase.RData.Dnssec

Associated Types

type RDataExtensionVal (X_ds n) 
Instance details

Defined in Net.DNSBase.RData.Dnssec

type RDataExtensionVal (X_ds n) = ()

Methods

rdataExtensionVal :: forall b -> b ~ X_ds n => RDataExtensionVal (X_ds n) Source #

rdType :: forall b -> b ~ X_ds n => RRTYPE Source #

rdTypePres :: forall b -> b ~ X_ds n => Builder -> Builder Source #

rdDecode :: forall b -> b ~ X_ds n => RDataExtensionVal (X_ds n) -> Int -> SGet RData Source #

rdEncode :: X_ds n -> SPut s RData Source #

cnEncode :: X_ds n -> SPut s RData Source #

(Nat16 n, KnownSymbol (XkeyConName n)) => KnownRData (X_key n) Source # 
Instance details

Defined in Net.DNSBase.RData.Dnssec

Associated Types

type RDataExtensionVal (X_key n) 
Instance details

Defined in Net.DNSBase.RData.Dnssec

type RDataExtensionVal (X_key n) = ()

Methods

rdataExtensionVal :: forall b -> b ~ X_key n => RDataExtensionVal (X_key n) Source #

rdType :: forall b -> b ~ X_key n => RRTYPE Source #

rdTypePres :: forall b -> b ~ X_key n => Builder -> Builder Source #

rdDecode :: forall b -> b ~ X_key n => RDataExtensionVal (X_key n) -> Int -> SGet RData Source #

rdEncode :: X_key n -> SPut s RData Source #

cnEncode :: X_key n -> SPut s RData Source #

(Nat16 n, KnownSymbol (XsigConName n)) => KnownRData (X_sig n) Source # 
Instance details

Defined in Net.DNSBase.RData.Dnssec

Associated Types

type RDataExtensionVal (X_sig n) 
Instance details

Defined in Net.DNSBase.RData.Dnssec

type RDataExtensionVal (X_sig n) = ()

Methods

rdataExtensionVal :: forall b -> b ~ X_sig n => RDataExtensionVal (X_sig n) Source #

rdType :: forall b -> b ~ X_sig n => RRTYPE Source #

rdTypePres :: forall b -> b ~ X_sig n => Builder -> Builder Source #

rdDecode :: forall b -> b ~ X_sig n => RDataExtensionVal (X_sig n) -> Int -> SGet RData Source #

rdEncode :: X_sig n -> SPut s RData Source #

cnEncode :: X_sig n -> SPut s RData Source #

(Typeable n, Nat16 n, KnownSymbol (XdomainConName n)) => KnownRData (X_domain n) Source #

Name compression used on input and output.

Instance details

Defined in Net.DNSBase.RData.Internal.XNAME

Associated Types

type RDataExtensionVal (X_domain n) 
Instance details

Defined in Net.DNSBase.RData.Internal.XNAME

Methods

rdataExtensionVal :: forall b -> b ~ X_domain n => RDataExtensionVal (X_domain n) Source #

rdType :: forall b -> b ~ X_domain n => RRTYPE Source #

rdTypePres :: forall b -> b ~ X_domain n => Builder -> Builder Source #

rdDecode :: forall b -> b ~ X_domain n => RDataExtensionVal (X_domain n) -> Int -> SGet RData Source #

rdEncode :: X_domain n -> SPut s RData Source #

cnEncode :: X_domain n -> SPut s RData Source #

(Nat16 n, KnownSymbol (XnidConName n)) => KnownRData (X_nid n) Source # 
Instance details

Defined in Net.DNSBase.RData.SRV

Associated Types

type RDataExtensionVal (X_nid n) 
Instance details

Defined in Net.DNSBase.RData.SRV

type RDataExtensionVal (X_nid n) = ()

Methods

rdataExtensionVal :: forall b -> b ~ X_nid n => RDataExtensionVal (X_nid n) Source #

rdType :: forall b -> b ~ X_nid n => RRTYPE Source #

rdTypePres :: forall b -> b ~ X_nid n => Builder -> Builder Source #

rdDecode :: forall b -> b ~ X_nid n => RDataExtensionVal (X_nid n) -> Int -> SGet RData Source #

rdEncode :: X_nid n -> SPut s RData Source #

cnEncode :: X_nid n -> SPut s RData Source #

(Nat16 n, KnownSymbol (XsvcbConName n)) => KnownRData (X_svcb n) Source # 
Instance details

Defined in Net.DNSBase.RData.SVCB

Associated Types

type RDataExtensionVal (X_svcb n) 
Instance details

Defined in Net.DNSBase.RData.SVCB

Methods

rdataExtensionVal :: forall b -> b ~ X_svcb n => RDataExtensionVal (X_svcb n) Source #

rdType :: forall b -> b ~ X_svcb n => RRTYPE Source #

rdTypePres :: forall b -> b ~ X_svcb n => Builder -> Builder Source #

rdDecode :: forall b -> b ~ X_svcb n => RDataExtensionVal (X_svcb n) -> Int -> SGet RData Source #

rdEncode :: X_svcb n -> SPut s RData Source #

cnEncode :: X_svcb n -> SPut s RData Source #

(Nat16 n, KnownSymbol (XtlsaConName n)) => KnownRData (X_tlsa n) Source # 
Instance details

Defined in Net.DNSBase.RData.TLSA

Associated Types

type RDataExtensionVal (X_tlsa n) 
Instance details

Defined in Net.DNSBase.RData.TLSA

Methods

rdataExtensionVal :: forall b -> b ~ X_tlsa n => RDataExtensionVal (X_tlsa n) Source #

rdType :: forall b -> b ~ X_tlsa n => RRTYPE Source #

rdTypePres :: forall b -> b ~ X_tlsa n => Builder -> Builder Source #

rdDecode :: forall b -> b ~ X_tlsa n => RDataExtensionVal (X_tlsa n) -> Int -> SGet RData Source #

rdEncode :: X_tlsa n -> SPut s RData Source #

cnEncode :: X_tlsa n -> SPut s RData Source #

class TypeExtensible a v where Source #

RR-data or EDNS-option types whose codec admits a type-driven extension. See Adding a custom RR type for an example of this mechanism in use, and Writing a type-driven extensible codec for the steps to implement a type-driven extensible codec of your own.

Associated Types

type TypeExtensionArg a b Source #

Constraint a caller's extension type b must satisfy.

Methods

extendByType :: forall t b -> (t ~ a, TypeExtensionArg t b) => v -> v Source #

Fold a caller's extension type b into the existing codec context value of type v.

data RDataCodec Source #

Known RData Proxy + Codec parameter pair

Encoder and Decoder combinators