packages feed

bytebuild-0.3.9.0: src/Data/Bytes/Builder/Class.hs

{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE TypeSynonymInstances #-}

module Data.Bytes.Builder.Class
  ( ToBuilder(..)
  ) where

import Data.Bytes (Bytes)
import Data.Bytes.Builder (Builder)
import Data.ByteString.Short (ShortByteString)
import Data.Int
import Data.Primitive.ByteArray (ByteArray)
import Data.Text.Short (ShortText)
import Data.Word

import qualified Data.Bytes.Builder as Builder

-- | Types that can be encoded as a builder. Human-readable encodings
-- are used when possible. For example, numbers are encoded an ascii-encoded
-- decimal characters. UTF-8 is preferred for textual types. For types
-- that represent arbitrary bytes (e.g. Bytes, ByteString), the bytes
-- are preserved.
--
-- The goal of this typeclass is to reduce the size of builders produced
-- by quasiquotation.
class ToBuilder a where
  toBuilder :: a -> Builder

-- | Identity
instance ToBuilder Builder where
  toBuilder = id

-- | Uses @bytes@.
instance ToBuilder Bytes where
  toBuilder = Builder.bytes

-- | Uses @byteArray@
instance ToBuilder ByteArray where
  toBuilder = Builder.byteArray

-- | Uses @shortByteString@
instance ToBuilder ShortByteString where
  toBuilder = Builder.shortByteString

-- | Uses @shortTextUtf8@.
instance ToBuilder ShortText where
  toBuilder = Builder.shortTextUtf8

-- | Uses @stringUtf8@
instance ToBuilder String where
  toBuilder = Builder.stringUtf8

-- | Uses @int64Dec@.
instance ToBuilder Int64 where
  toBuilder = Builder.int64Dec

-- | Uses @int32Dec@.
instance ToBuilder Int32 where
  toBuilder = Builder.int32Dec

-- | Uses @int16Dec@.
instance ToBuilder Int16 where
  toBuilder = Builder.int16Dec

-- | Uses @int8Dec@.
instance ToBuilder Int8 where
  toBuilder = Builder.int8Dec

-- | Uses @intDec@.
instance ToBuilder Int where
  toBuilder = Builder.intDec

-- | Uses @word64Dec@.
instance ToBuilder Word64 where
  toBuilder = Builder.word64Dec

-- | Uses @word32Dec@.
instance ToBuilder Word32 where
  toBuilder = Builder.word32Dec

-- | Uses @word16Dec@.
instance ToBuilder Word16 where
  toBuilder = Builder.word16Dec

-- | Uses @word8Dec@.
instance ToBuilder Word8 where
  toBuilder = Builder.word8Dec

-- | Uses @wordDec@.
instance ToBuilder Word where
  toBuilder = Builder.wordDec

-- | uses @doubleDec@
instance ToBuilder Double where
  toBuilder = Builder.doubleDec