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 }