{-# LANGUAGE FlexibleInstances #-}

module Hledger.Flow.Types where

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

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
$cshowsPrec :: Int -> LogMessage -> ShowS
showsPrec :: Int -> LogMessage -> ShowS
$cshow :: LogMessage -> String
show :: LogMessage -> String
$cshowList :: [LogMessage] -> ShowS
showList :: [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
$cshowsPrec :: Int -> HledgerInfo -> ShowS
showsPrec :: Int -> HledgerInfo -> ShowS
$cshow :: HledgerInfo -> String
show :: HledgerInfo -> String
$cshowList :: [HledgerInfo] -> ShowS
showList :: [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

class HasPrettyReports a where
  prettyReports :: a -> Bool