module Taskell.IO.Config.GitHub
    ( Config
    , defaultConfig
    , parser
    , token
    ) where

import ClassyPrelude

import Data.Ini.Config

import Taskell.IO.HTTP.GitHub (GitHubToken)

data Config = Config
    { Config -> Maybe GitHubToken
token :: Maybe GitHubToken
    }

defaultConfig :: Config
defaultConfig :: Config
defaultConfig = Config :: Maybe GitHubToken -> Config
Config {token :: Maybe GitHubToken
token = Maybe GitHubToken
forall a. Maybe a
Nothing}

tokenP :: SectionParser (Maybe GitHubToken)
tokenP :: SectionParser (Maybe GitHubToken)
tokenP = GitHubToken -> SectionParser (Maybe GitHubToken)
fieldMb GitHubToken
"token"

parser :: IniParser Config
parser :: IniParser Config
parser = Config -> Maybe Config -> Config
forall a. a -> Maybe a -> a
fromMaybe Config
defaultConfig (Maybe Config -> Config)
-> IniParser (Maybe Config) -> IniParser Config
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> GitHubToken -> SectionParser Config -> IniParser (Maybe Config)
forall a. GitHubToken -> SectionParser a -> IniParser (Maybe a)
sectionMb GitHubToken
"github" (Maybe GitHubToken -> Config
Config (Maybe GitHubToken -> Config)
-> SectionParser (Maybe GitHubToken) -> SectionParser Config
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> SectionParser (Maybe GitHubToken)
tokenP)