|
1 | 1 | module Cardano.Api.IO
|
2 | 2 | ( OutputFile(..)
|
| 3 | + |
| 4 | + , writeByteStringFile |
| 5 | + , writeByteStringOutput |
| 6 | + |
| 7 | + , writeTextFile |
| 8 | + , writeTextOutput |
3 | 9 | ) where
|
4 | 10 |
|
| 11 | +import Cardano.Api.Error (FileError (..)) |
| 12 | + |
| 13 | +import Control.Monad.IO.Class (MonadIO (..)) |
| 14 | +import Control.Monad.Trans.Except (ExceptT) |
| 15 | +import Control.Monad.Trans.Except.Extra (handleIOExceptT) |
| 16 | +import Data.ByteString (ByteString) |
| 17 | +import qualified Data.ByteString.Char8 as BS |
| 18 | +import qualified Data.ByteString.Char8 as BSC |
| 19 | +import Data.Text (Text) |
| 20 | +import qualified Data.Text.IO as Text |
| 21 | + |
5 | 22 | newtype OutputFile = OutputFile
|
6 | 23 | { unOutputFile :: FilePath
|
7 | 24 | }
|
8 | 25 | deriving Show
|
| 26 | + |
| 27 | +writeByteStringFile :: MonadIO m => OutputFile -> ByteString -> ExceptT (FileError ()) m () |
| 28 | +writeByteStringFile (OutputFile fp) bs = |
| 29 | + handleIOExceptT (FileIOError fp) $ BS.writeFile fp bs |
| 30 | + |
| 31 | +writeByteStringOutput :: MonadIO m => Maybe OutputFile -> ByteString -> ExceptT (FileError ()) m () |
| 32 | +writeByteStringOutput mOutput bs = case mOutput of |
| 33 | + Just (OutputFile fp) -> handleIOExceptT (FileIOError fp) $ BS.writeFile fp bs |
| 34 | + Nothing -> liftIO $ BSC.putStr bs |
| 35 | + |
| 36 | +writeTextFile :: MonadIO m => OutputFile -> Text -> ExceptT (FileError ()) m () |
| 37 | +writeTextFile (OutputFile fp) t = |
| 38 | + handleIOExceptT (FileIOError fp) $ Text.writeFile fp t |
| 39 | + |
| 40 | +writeTextOutput :: MonadIO m => Maybe OutputFile -> Text -> ExceptT (FileError ()) m () |
| 41 | +writeTextOutput mOutput t = case mOutput of |
| 42 | + Just (OutputFile fp) -> handleIOExceptT (FileIOError fp) $ Text.writeFile fp t |
| 43 | + Nothing -> liftIO $ Text.putStr t |
0 commit comments