packages feed

cachix-0.3.5: src/Cachix/Client/HumanSize.hs

module Cachix.Client.HumanSize where

import Protolude
import Text.Printf (printf)
import qualified Prelude

humanSize :: Double -> Text
humanSize size
  | size < unitstep 1 = render "B" size
  | size < unitstep 2 = render "KiB" $ size / unitstep 1
  | size < unitstep 3 = render "MiB" $ size / unitstep 2
  | size < unitstep 4 = render "GiB" $ size / unitstep 3
  | otherwise = render "TiB" $ size / unitstep 4
  where
    unitstep :: Int -> Double
    unitstep i = 1024.0 ^ i
    render :: Text -> Double -> Text
    render unit unitsize =
      toS (printf "%.2f" unitsize :: Prelude.String) <> " " <> unit