packages feed

amazonka-core-2.0: src/Amazonka/Data/ByteString.hs

--

-- |
-- Module      : Amazonka.Data.ByteString
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-- Stability   : provisional
-- Portability : non-portable (GHC extensions)
module Amazonka.Data.ByteString
  ( -- * ByteString
    ByteString,
    ByteStringLazy,
    ToByteString (..),
    showBS,
    stripBS,
  )
where

import Amazonka.Data.Text
import Amazonka.Prelude
import qualified Data.ByteString.Builder as Build
import qualified Data.ByteString.Char8 as BS8
import qualified Data.ByteString.Lazy as LBS
import qualified Data.CaseInsensitive as CI
import qualified Data.Char as Char
import qualified Data.Text.Encoding as Text
import qualified Network.HTTP.Types as HTTP
import qualified Numeric

showBS :: ToByteString a => a -> String
showBS = BS8.unpack . toBS

stripBS :: ByteString -> ByteString
stripBS = BS8.dropWhile Char.isSpace . fst . BS8.spanEnd Char.isSpace

class ToByteString a where
  toBS :: a -> ByteString
  default toBS :: ToText a => a -> ByteString
  toBS = Text.encodeUtf8 . toText

instance ToByteString ByteString where
  toBS = id

instance ToByteString ByteStringBuilder where
  toBS = toBS . Build.toLazyByteString

instance ToByteString ByteStringLazy where
  toBS = LBS.toStrict

instance ToByteString Text where
  toBS = Text.encodeUtf8

instance ToByteString String where
  toBS = BS8.pack

instance ToByteString Int where
  toBS = toBS . Build.intDec

instance ToByteString Integer where
  toBS = toBS . Build.integerDec

instance ToByteString Natural where
  toBS = toBS . toInteger

instance ToByteString Double where
  toBS = toBS . ($ "") . Numeric.showFFloat Nothing

instance ToByteString HTTP.StdMethod where
  toBS = HTTP.renderStdMethod

instance ToByteString UTCTime where
  toBS = BS8.pack . show

instance ToByteString a => ToByteString (CI a) where
  toBS = toBS . CI.original