buffet-0.2.0: src/Buffet/Toolbox/TextTools.hs
module Buffet.Toolbox.TextTools
( decodeUtf8
, defaultJsonOptions
, encodeUtf8
, intercalateNewline
, lexicographicalCompare
, prettyPrintJson
) where
import qualified Data.Aeson as Aeson
import qualified Data.Aeson.Encode.Pretty as Pretty
import qualified Data.ByteString.Lazy as ByteString
import qualified Data.Ord as Ord
import qualified Data.Text as T
import qualified Data.Text.Lazy as Lazy
import qualified Data.Text.Lazy.Encoding as Encoding
import Prelude (Bool(True), Ordering, (.))
decodeUtf8 :: ByteString.ByteString -> T.Text
decodeUtf8 = Lazy.toStrict . Encoding.decodeUtf8
defaultJsonOptions :: Aeson.Options
defaultJsonOptions =
Aeson.defaultOptions {Aeson.fieldLabelModifier = Aeson.camelTo2 '_'}
encodeUtf8 :: T.Text -> ByteString.ByteString
encodeUtf8 = Encoding.encodeUtf8 . Lazy.fromStrict
intercalateNewline :: [T.Text] -> T.Text
intercalateNewline = T.intercalate newline
where
newline = T.pack "\n"
lexicographicalCompare :: T.Text -> T.Text -> Ordering
lexicographicalCompare = Ord.comparing sortKey
where
sortKey text = (T.toCaseFold text, text)
prettyPrintJson :: Aeson.ToJSON a => a -> T.Text
prettyPrintJson = decodeUtf8 . Pretty.encodePretty' configuration . Aeson.toJSON
where
configuration =
Pretty.defConfig
{ Pretty.confIndent = Pretty.Spaces 2
, Pretty.confCompare = lexicographicalCompare
, Pretty.confTrailingNewline = True
}