unwitch-3.0.0: src/Unwitch/Convert/Text.hs
-- | Conversions from 'Data.Text.Text'.
module Unwitch.Convert.Text
( toLazyText
, toString
, fromString
, toByteStringUtf8
, toByteStringUtf16LE
, toByteStringUtf16BE
, toByteStringUtf32LE
, toByteStringUtf32BE
, toByteStringLatin1
)
where
import Data.ByteString (ByteString)
import Data.ByteString.Char8 qualified as BSC8
import Data.Text (Text)
import Data.Text qualified as T
import Data.Text.Encoding qualified as TE
import Data.Text.Lazy qualified as LT
toLazyText :: Text -> LT.Text
#ifdef __GLASGOW_HASKELL__
toLazyText = LT.fromStrict
#else
toLazyText = LT.toLazy
#endif
toString :: Text -> String
toString = T.unpack
fromString :: String -> Text
fromString = T.pack
toByteStringUtf8 :: Text -> ByteString
toByteStringUtf8 = TE.encodeUtf8
toByteStringUtf16LE :: Text -> ByteString
toByteStringUtf16LE = TE.encodeUtf16LE
toByteStringUtf16BE :: Text -> ByteString
toByteStringUtf16BE = TE.encodeUtf16BE
toByteStringUtf32LE :: Text -> ByteString
toByteStringUtf32LE = TE.encodeUtf32LE
toByteStringUtf32BE :: Text -> ByteString
toByteStringUtf32BE = TE.encodeUtf32BE
-- | Returns 'Nothing' if any character exceeds @\xFF@.
toByteStringLatin1 :: Text -> Maybe ByteString
toByteStringLatin1 t = if all isLatin1 str
then Just $ BSC8.pack str
else Nothing
where str = T.unpack t
isLatin1 :: Char -> Bool
isLatin1 c = c <= '\xFF'