packages feed

github-workflow-commands-0.0.0.0: library/GitHub/Workflow/Command/Syntax/ToByteString.hs

module GitHub.Workflow.Command.Syntax.ToByteString
  ( ToByteString (..)
  , printByteStringLn
  ) where

import Control.Category
import Control.Monad.IO.Class (MonadIO, liftIO)
import Data.ByteString
import Data.ByteString.Builder qualified as BSB
import Data.ByteString.Lazy qualified as BSL
import Data.Semigroup ((<>))
import System.IO (stdout)

class ToByteString a where
  toByteStringBuilder :: a -> BSB.Builder

  toByteString :: a -> ByteString
  toByteString = BSL.toStrict . BSB.toLazyByteString . toByteStringBuilder

printByteStringLn :: (ToByteString a, MonadIO m) => a -> m ()
printByteStringLn =
  liftIO
    . BSB.hPutBuilder stdout
    . (<> BSB.char7 '\n')
    . toByteStringBuilder