-- | Conversions from 'Data.ByteString.ByteString'.
module Unwitch.Convert.ByteString
  ( toLazyByteString
  , toShortByteString
  , toWord8s
  , fromWord8s
  , toTextLatin1
#ifdef __GLASGOW_HASKELL__
  , toTextUtf8
  , toTextUtf16LE
  , toTextUtf16BE
  , toTextUtf32LE
  , toTextUtf32BE
#endif
  )
where

import Data.ByteString (ByteString)
import Data.ByteString qualified as BS
import Data.ByteString.Lazy qualified as LBS
import Data.ByteString.Short qualified as SBS
import Data.ByteString.Short (ShortByteString)
import Data.Text (Text)
import Data.Text.Encoding qualified as TE
import Data.Word (Word8)
#ifdef __GLASGOW_HASKELL__
import Data.Text.Encoding.Error (UnicodeException)
import Unwitch.TryEvaluate (tryEvaluate)
#endif

toLazyByteString :: ByteString -> LBS.ByteString
toLazyByteString :: ByteString -> ByteString
toLazyByteString = ByteString -> ByteString
LBS.fromStrict

toShortByteString :: ByteString -> ShortByteString
toShortByteString :: ByteString -> ShortByteString
toShortByteString = ByteString -> ShortByteString
SBS.toShort

toWord8s :: ByteString -> [Word8]
toWord8s :: ByteString -> [Word8]
toWord8s = ByteString -> [Word8]
BS.unpack

fromWord8s :: [Word8] -> ByteString
fromWord8s :: [Word8] -> ByteString
fromWord8s = [Word8] -> ByteString
BS.pack

toTextLatin1 :: ByteString -> Text
toTextLatin1 :: ByteString -> Text
toTextLatin1 = ByteString -> Text
TE.decodeLatin1

#ifdef __GLASGOW_HASKELL__
toTextUtf8 :: ByteString -> Either UnicodeException Text
toTextUtf8 :: ByteString -> Either UnicodeException Text
toTextUtf8 = ByteString -> Either UnicodeException Text
TE.decodeUtf8'

toTextUtf16LE :: ByteString -> Either UnicodeException Text
toTextUtf16LE :: ByteString -> Either UnicodeException Text
toTextUtf16LE = Text -> Either UnicodeException Text
forall e a. Exception e => a -> Either e a
tryEvaluate (Text -> Either UnicodeException Text)
-> (ByteString -> Text)
-> ByteString
-> Either UnicodeException Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Text
TE.decodeUtf16LE

toTextUtf16BE :: ByteString -> Either UnicodeException Text
toTextUtf16BE :: ByteString -> Either UnicodeException Text
toTextUtf16BE = Text -> Either UnicodeException Text
forall e a. Exception e => a -> Either e a
tryEvaluate (Text -> Either UnicodeException Text)
-> (ByteString -> Text)
-> ByteString
-> Either UnicodeException Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Text
TE.decodeUtf16BE

toTextUtf32LE :: ByteString -> Either UnicodeException Text
toTextUtf32LE :: ByteString -> Either UnicodeException Text
toTextUtf32LE = Text -> Either UnicodeException Text
forall e a. Exception e => a -> Either e a
tryEvaluate (Text -> Either UnicodeException Text)
-> (ByteString -> Text)
-> ByteString
-> Either UnicodeException Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Text
TE.decodeUtf32LE

toTextUtf32BE :: ByteString -> Either UnicodeException Text
toTextUtf32BE :: ByteString -> Either UnicodeException Text
toTextUtf32BE = Text -> Either UnicodeException Text
forall e a. Exception e => a -> Either e a
tryEvaluate (Text -> Either UnicodeException Text)
-> (ByteString -> Text)
-> ByteString
-> Either UnicodeException Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Text
TE.decodeUtf32BE
#endif