module Conversion.ByteString () where

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


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

instance Conversion BS.ByteString [Char] where
  {-# INLINE convert #-}
  convert = BSC.unpack

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

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


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

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

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


instance Conversion BB.Builder [Word8] where
  {-# INLINE convert #-}
  convert = convert . BB.toLazyByteString

instance Conversion BB.Builder BS.ByteString where
  {-# INLINE convert #-}
  convert = convert . BB.toLazyByteString

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


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

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

instance Conversion [Word8] BB.Builder where
  {-# INLINE convert #-}
  convert = foldMap BB.word8


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

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

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