{-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ViewPatterns #-} import Data.Map (Map) import qualified Data.Map as Map import Data.Sequence (Seq) import qualified Data.Sequence as Seq import Data.Text (Text) import qualified Data.Text as T import qualified Data.ByteString.Lazy.Char8 as Lazy (ByteString) import qualified Data.ByteString.Lazy.Char8 as LCBS import Control.Monad import Control.Monad import Text.Show.Pretty (dumpStr) import Data.Aeson.Encode.Pretty (encodePretty) import System.IO import Thermoprint.Client import Options import Debug.Trace main :: IO () main = withArgs (main' <=< dumpOpts) where dumpOpts c@(TPrint{..}) = c <$ when (dumpOptions) (hPutStrLn stderr $ dumpStr c) main' config@(TPrint{..}) = withOutput config $ tprint config (mkClient' baseUrl) withOutput :: TPrint -> (Handle -> IO a) -> IO a withOutput TPrint{..} a | (_, WriteFile f) <- output = withFile f WriteMode a | otherwise = a stdout tprint :: TPrint -> Client IO -> Handle -> IO () tprint TPrint{ operation = Printers, ..} Client{..} out = printers >>= format where format ps | (Human, _) <- output = mapM_ (\(PrinterId n, st) -> hPutStrLn out $ show n ++ "\t" ++ humanStatus st) $ Map.toAscList ps | (JSON , _) <- output = LCBS.hPutStrLn out $ encodePretty ps | otherwise = hPutStrLn out . dumpStr $ Map.toAscList ps humanStatus (Busy (JobId n)) = "busy printing job #" ++ show n humanStatus (Available) = "available" tprint _ _ _ = undefined