{- | Module : ELynx.Tools.ByteString Copyright : (c) Dominik Schrempf 2020 License : GPL-3.0-or-later Maintainer : dominik.schrempf@gmail.com Stability : unstable Portability : portable Creation date: Thu Feb 14 13:24:53 2019. indispensable tools for ByteString handling :). -} module ELynx.Tools.ByteString ( -- * ByteString handling alignRightWith , alignRight , alignLeftWith , alignLeft , summarizeByteString , c2w , w2c , bShow ) where import Data.ByteString.Internal ( c2w , w2c ) import qualified Data.ByteString.Lazy.Char8 as L -- | For a given width, align string to the right; use given fill character; -- trim on the left if string is longer. alignRightWith :: Char -> Int -> L.ByteString -> L.ByteString alignRightWith c n s = L.replicate (fromIntegral n - l) c <> L.take (fromIntegral n) s where l = L.length s -- | For a given width, align string to the right; trim on the left if string is -- longer. alignRight :: Int -> L.ByteString -> L.ByteString alignRight = alignRightWith ' ' -- | For a given width, align string to the left; use given fill character; trim -- on the right if string is longer. alignLeftWith :: Char -> Int -> L.ByteString -> L.ByteString alignLeftWith c n s = L.take (fromIntegral n) s <> L.replicate (fromIntegral n - l) c where l = L.length s -- | For a given width, align string to the left; trim on the right if string is -- longer. alignLeft :: Int -> L.ByteString -> L.ByteString alignLeft = alignLeftWith ' ' -- | If a string is longer than a given value, trim it and add some dots. summarizeByteString :: Int -> L.ByteString -> L.ByteString summarizeByteString l s | L.length s >= fromIntegral l = L.take (fromIntegral l) s <> L.pack "..." | otherwise = s -- | Conversion to 'L.ByteString'. bShow :: Show a => a -> L.ByteString bShow = L.pack . show