{-# LANGUAGE ImportQualifiedPost #-}

{- |
Module    : Data.Ini.Reader
Copyright : 2011-2014 Magnus Therning
License   : BSD3

Parser for configurations.
-}
module Data.Ini.Reader (
    parse,
    IniReaderError (..),
    IniParseResult,
) where

import Control.Monad.Except (throwError)
import Text.ParserCombinators.Parsec qualified as P

import Data.Ini.Reader.Internals (IniParseResult, IniReaderError (..), buildConfig, iniParser)
import Data.Ini.Types (Config)

-- | Parser for a configuration contained in a 'String'.
parse :: String -> IniParseResult Config
parse :: String -> IniParseResult Config
parse String
s = case forall s t a.
Stream s Identity t =>
Parsec s () a -> String -> s -> Either ParseError a
P.parse Parser [IniFile]
iniParser String
"ini" String
s of
    Left ParseError
e -> forall e (m :: * -> *) a. MonadError e m => e -> m a
throwError forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> IniReaderError
IniParserError forall a b. (a -> b) -> a -> b
$ forall a. Show a => a -> String
show ParseError
e
    Right [IniFile]
is -> [IniFile] -> IniParseResult Config
buildConfig [IniFile]
is