{-# LANGUAGE FlexibleInstances #-}

module Hledger.Flow.Types where

import qualified Turtle (ExitCode, NominalDiffTime, Shell, Line)
import qualified Data.Text as T

import Hledger.Flow.PathHelpers

type BaseDir = AbsDir
type RunDir = RelDir

data LogMessage = StdOut T.Text | StdErr T.Text | Terminate deriving (Int -> LogMessage -> ShowS
[LogMessage] -> ShowS
LogMessage -> String
(Int -> LogMessage -> ShowS)
-> (LogMessage -> String)
-> ([LogMessage] -> ShowS)
-> Show LogMessage
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [LogMessage] -> ShowS
$cshowList :: [LogMessage] -> ShowS
show :: LogMessage -> String
$cshow :: LogMessage -> String
showsPrec :: Int -> LogMessage -> ShowS
$cshowsPrec :: Int -> LogMessage -> ShowS
Show)
type FullOutput = (Turtle.ExitCode, T.Text, T.Text)
type FullTimedOutput = (FullOutput, Turtle.NominalDiffTime)

type ProcFun = T.Text -> [T.Text] -> Turtle.Shell Turtle.Line -> IO FullOutput
type ProcInput = (T.Text, [T.Text], Turtle.Shell Turtle.Line)

data HledgerInfo = HledgerInfo { HledgerInfo -> AbsFile
hlPath :: AbsFile
                               , HledgerInfo -> Text
hlVersion :: T.Text
                               }
                 deriving (Int -> HledgerInfo -> ShowS
[HledgerInfo] -> ShowS
HledgerInfo -> String
(Int -> HledgerInfo -> ShowS)
-> (HledgerInfo -> String)
-> ([HledgerInfo] -> ShowS)
-> Show HledgerInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [HledgerInfo] -> ShowS
$cshowList :: [HledgerInfo] -> ShowS
show :: HledgerInfo -> String
$cshow :: HledgerInfo -> String
showsPrec :: Int -> HledgerInfo -> ShowS
$cshowsPrec :: Int -> HledgerInfo -> ShowS
Show)

class HasVerbosity a where
  verbose :: a -> Bool

class HasBaseDir a where
  baseDir :: a -> BaseDir

class HasRunDir a where
  importRunDir :: a -> RunDir

class HasSequential a where
  sequential :: a -> Bool

class HasBatchSize a where
  batchSize :: a -> Int