module Blammo.Logging.LogSettings.Env
( parse
, parser
, parseWith
, parserWith
) where
import Prelude
import Blammo.Logging.LogSettings
import Data.Bifunctor (first)
import Data.Semigroup (Endo(..))
import Env hiding (parse)
import qualified Env
import Text.Read (readEither)
parse :: IO LogSettings
parse :: IO LogSettings
parse = LogSettings -> IO LogSettings
parseWith LogSettings
defaultLogSettings
parser :: Parser Error LogSettings
parser :: Parser Error LogSettings
parser = LogSettings -> Parser Error LogSettings
parserWith LogSettings
defaultLogSettings
parseWith :: LogSettings -> IO LogSettings
parseWith :: LogSettings -> IO LogSettings
parseWith = forall e a.
AsUnset e =>
(Info Error -> Info e) -> Parser e a -> IO a
Env.parse forall a. a -> a
id forall b c a. (b -> c) -> (a -> b) -> a -> c
. LogSettings -> Parser Error LogSettings
parserWith
parserWith :: LogSettings -> Parser Error LogSettings
parserWith :: LogSettings -> Parser Error LogSettings
parserWith LogSettings
defaults = (forall a b. (a -> b) -> a -> b
$ LogSettings
defaults) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Endo a -> a -> a
appEndo forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. Monoid a => [a] -> a
mconcat forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (t :: * -> *) (f :: * -> *) a.
(Traversable t, Applicative f) =>
t (f a) -> f (t a)
sequenceA
[ forall e a.
AsUnset e =>
Reader e a -> String -> Mod Var a -> Parser e a
var (forall e a b.
AsUnread e =>
(String -> Either String a) -> (a -> b -> b) -> Reader e (Endo b)
endo String -> Either String LogLevels
readLogLevels LogLevels -> LogSettings -> LogSettings
setLogSettingsLevels) String
"LOG_LEVEL" (forall a. a -> Mod Var a
def forall a. Monoid a => a
mempty)
, forall e a.
AsUnset e =>
Reader e a -> String -> Mod Var a -> Parser e a
var (forall e a b.
AsUnread e =>
(String -> Either String a) -> (a -> b -> b) -> Reader e (Endo b)
endo String -> Either String LogDestination
readLogDestination LogDestination -> LogSettings -> LogSettings
setLogSettingsDestination) String
"LOG_DESTINATION" (forall a. a -> Mod Var a
def forall a. Monoid a => a
mempty)
, forall e a.
AsUnset e =>
Reader e a -> String -> Mod Var a -> Parser e a
var (forall e a b.
AsUnread e =>
(String -> Either String a) -> (a -> b -> b) -> Reader e (Endo b)
endo String -> Either String LogFormat
readLogFormat LogFormat -> LogSettings -> LogSettings
setLogSettingsFormat) String
"LOG_FORMAT" (forall a. a -> Mod Var a
def forall a. Monoid a => a
mempty)
, forall e a.
AsUnset e =>
Reader e a -> String -> Mod Var a -> Parser e a
var (forall e a b.
AsUnread e =>
(String -> Either String a) -> (a -> b -> b) -> Reader e (Endo b)
endo String -> Either String LogColor
readLogColor LogColor -> LogSettings -> LogSettings
setLogSettingsColor) String
"LOG_COLOR" (forall a. a -> Mod Var a
def forall a. Monoid a => a
mempty)
, forall e a.
AsUnset e =>
Reader e a -> String -> Mod Var a -> Parser e a
var (forall e a b.
AsUnread e =>
(String -> Either String a) -> (a -> b -> b) -> Reader e (Endo b)
endo forall a. Read a => String -> Either String a
readEither Int -> LogSettings -> LogSettings
setLogSettingsBreakpoint) String
"LOG_BREAKPOINT" (forall a. a -> Mod Var a
def forall a. Monoid a => a
mempty)
, forall e a.
AsUnset e =>
Reader e a -> String -> Mod Var a -> Parser e a
var (forall e a b.
AsUnread e =>
(String -> Either String a) -> (a -> b -> b) -> Reader e (Endo b)
endo forall a. Read a => String -> Either String a
readEither (Maybe Int -> LogSettings -> LogSettings
setLogSettingsConcurrency forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. a -> Maybe a
Just)) String
"LOG_CONCURRENCY" (forall a. a -> Mod Var a
def forall a. Monoid a => a
mempty)
]
endo
:: AsUnread e
=> (String -> Either String a)
-> (a -> b -> b)
-> Reader e (Endo b)
endo :: forall e a b.
AsUnread e =>
(String -> Either String a) -> (a -> b -> b) -> Reader e (Endo b)
endo String -> Either String a
reader a -> b -> b
setter String
x = forall (p :: * -> * -> *) a b c.
Bifunctor p =>
(a -> b) -> p a c -> p b c
first forall e. AsUnread e => String -> e
unread forall a b. (a -> b) -> a -> b
$ forall a. (a -> a) -> Endo a
Endo forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> b -> b
setter forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> String -> Either String a
reader String
x