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 = BS.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