packages feed

patrol-1.2.0.0: source/library/Patrol/Type/Items.hs

module Patrol.Type.Items where

import qualified Data.ByteString as ByteString
import qualified Data.ByteString.Builder as Builder
import qualified Patrol.Type.Item as Item

-- | The items contained in an 'Patrol.Type.Envelope.Envelope'.
--
-- This is typically a list of 'Patrol.Type.Item.Item', but can also be a
-- binary blob of 'ByteString.ByteString'.
data Items
  = EnvelopeItems [Item.Item]
  | Raw ByteString.ByteString
  deriving (Eq, Show)

serialize :: Items -> Builder.Builder
serialize items = case items of
  Raw buf -> Builder.byteString buf
  EnvelopeItems envelopeItems ->
    foldMap ((<> Builder.char7 '\n') . Item.serialize) envelopeItems