module Conversion.ByteString () where

import BasePrelude
import Conversion
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as BL
import qualified Data.ByteString.Builder as BB


instance Conversion BS.ByteString [Word8] where
  {-# INLINE convert #-}
  convert :: ByteString -> [Word8]
convert = ByteString -> [Word8]
BS.unpack

instance Conversion BS.ByteString BL.ByteString where
  {-# INLINE convert #-}
  convert :: ByteString -> ByteString
convert = ByteString -> ByteString
BL.fromStrict

instance Conversion BS.ByteString BB.Builder where
  {-# INLINE convert #-}
  convert :: ByteString -> Builder
convert = ByteString -> Builder
BB.byteString


instance Conversion BL.ByteString [Word8] where
  {-# INLINE convert #-}
  convert :: ByteString -> [Word8]
convert = ByteString -> [Word8]
BL.unpack

instance Conversion BL.ByteString BS.ByteString where
  {-# INLINE convert #-}
  convert :: ByteString -> ByteString
convert = ByteString -> ByteString
BL.toStrict

instance Conversion BL.ByteString BB.Builder where
  {-# INLINE convert #-}
  convert :: ByteString -> Builder
convert = ByteString -> Builder
BB.lazyByteString


instance Conversion BB.Builder [Word8] where
  {-# INLINE convert #-}
  convert :: Builder -> [Word8]
convert = ByteString -> [Word8]
forall a b. Conversion a b => a -> b
convert (ByteString -> [Word8])
-> (Builder -> ByteString) -> Builder -> [Word8]
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Builder -> ByteString
BB.toLazyByteString

instance Conversion BB.Builder BS.ByteString where
  {-# INLINE convert #-}
  convert :: Builder -> ByteString
convert = ByteString -> ByteString
forall a b. Conversion a b => a -> b
convert (ByteString -> ByteString)
-> (Builder -> ByteString) -> Builder -> ByteString
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Builder -> ByteString
BB.toLazyByteString

instance Conversion BB.Builder BL.ByteString where
  {-# INLINE convert #-}
  convert :: Builder -> ByteString
convert = Builder -> ByteString
BB.toLazyByteString


instance Conversion [Word8] BS.ByteString where
  {-# INLINE convert #-}
  convert :: [Word8] -> ByteString
convert = [Word8] -> ByteString
BS.pack

instance Conversion [Word8] BL.ByteString where
  {-# INLINE convert #-}
  convert :: [Word8] -> ByteString
convert = [Word8] -> ByteString
BL.pack

instance Conversion [Word8] BB.Builder where
  {-# INLINE convert #-}
  convert :: [Word8] -> Builder
convert = (Word8 -> Builder) -> [Word8] -> Builder
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap Word8 -> Builder
BB.word8


instance Conversion Word8 BS.ByteString where
  {-# INLINE convert #-}
  convert :: Word8 -> ByteString
convert = Word8 -> ByteString
BS.singleton

instance Conversion Word8 BL.ByteString where
  {-# INLINE convert #-}
  convert :: Word8 -> ByteString
convert = Word8 -> ByteString
BL.singleton

instance Conversion Word8 BB.Builder where
  {-# INLINE convert #-}
  convert :: Word8 -> Builder
convert = Word8 -> Builder
BB.word8