content: -- | DNS message encoder.
  --
  -- Note: 'Nework.DNS' is a client library, and its focus is on /sending/
  -- /queries/, and /receiving/ /replies/.  Thefore, while this module is
  -- reasonably adept at query generation, building a DNS server with this
  -- module requires additional work to handle message size limits, correct UDP
  -- truncation, proper EDNS negotiation, and so on.  Support for server-side DNS
  -- is at best rudimentary.
  --
  -- For sending queries, in most cases you should be using one of the functions
  -- from 'Network.DNS.Lookup' and 'Network.DNS.LookupRaw', or lastly, if you
  -- want to handle the network reads and writes for yourself (with your own code
  -- for UDP retries, TCP fallback, EDNS fallback, ...), then perhaps
  -- 'Network.DNS.IO.encodeQuestion' (letting 'Network.DNS' do the lookups for
  -- you in an @async@ thread is likely much simpler).
  --
  module Network.DNS.Encode (
      -- * Encode a DNS query (or response).
      encode
    ) where
  
  import Network.DNS.Imports
  import Network.DNS.StateBinary
  import Network.DNS.Types.Internal
  import Network.DNS.Encode.Builders
  
  -- | Encode a 'DNSMessage' for transmission over UDP.  For transmission over
  -- TCP encapsulate the result via 'Network.DNS.IO.encodeVC', or use
  -- 'Network.DNS.IO.sendVC', which handles this internally.  If any
  -- 'ResourceRecord' in the message contains incorrectly encoded 'Domain' name
  -- ByteStrings, this function may raise a 'DecodeError'.
  --
  encode :: DNSMessage -> ByteString
  encode = runSPut . putDNSMessage
  