{-# LANGUAGE DeriveLift #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}

module LndClient.Data.Type
  ( LndError (..),
    LoggingStrategy (..),
    logDefault,
    logDebug,
  )
where

import Chronos (Timespan)
import Control.Exception (Exception)
import LndClient.Import.External
import Network.HTTP2.Client.Exceptions as E

data LndError
  = ToGrpcError Text
  | FromGrpcError Text
  | LndGrpcError E.ClientError
  | GrpcUnexpectedResult Text
  | GrpcEmptyResult
  | LndError Text
  | LndEnvError Text
  | TChanTimeout Text
  deriving (Eq, Show)

newtype LoggingStrategy
  = LoggingStrategy
      (Severity -> Maybe Timespan -> Maybe LndError -> Severity)

logDefault :: LoggingStrategy
logDefault =
  LoggingStrategy $ \x _ _ -> x

logDebug :: LoggingStrategy
logDebug =
  LoggingStrategy $ \_ _ _ -> DebugS

instance Exception LndError