packages feed

phoityne-0.0.1.0: app/Phoityne/IO/Utility.hs

{-# LANGUAGE MultiWayIf #-}

module Phoityne.IO.Utility where

-- システム
import qualified Data.ByteString as B
import qualified Data.ByteString.Lazy as LBS
import GHC.IO.Encoding
import Distribution.System
import Control.Monad.Trans.Resource
import qualified Data.Conduit.Binary as C
import qualified Data.Conduit as C
import qualified Data.Conduit.List as C

-- |
--  
-- 
getReadHandleEncoding :: IO TextEncoding
getReadHandleEncoding = if
  | Windows == buildOS -> mkTextEncoding "CP932"
  | otherwise -> return utf8

-- |
--  
-- 
loadFile :: FilePath -> IO B.ByteString
loadFile path = do
  bs <- runResourceT
      $ C.sourceFile path
      C.$$ C.consume
  return $ B.concat bs

-- |
--  
-- 
saveFile :: FilePath -> B.ByteString -> IO ()
saveFile path cont = saveFileLBS path $ LBS.fromStrict cont

-- |
--  
-- 
saveFileLBS :: FilePath -> LBS.ByteString -> IO ()
saveFileLBS path cont = runResourceT
  $ C.sourceLbs cont
  C.$$ C.sinkFile path