module Toml (
Table,
Value(..),
parse,
prettyToml,
DocClass(..),
decode,
encode,
Result(..),
) where
import Toml.FromValue (FromValue (fromValue), Result(..))
import Toml.FromValue.Matcher (runMatcher)
import Toml.Parser (parseRawToml)
import Toml.Pretty (TomlDoc, DocClass(..), prettyToml, prettySemanticError, prettyMatchMessage, prettyLocated)
import Toml.Semantics (semantics)
import Toml.ToValue (ToTable (toTable))
import Toml.Value (Table, Value(..))
parse :: String -> Either String Table
parse :: String -> Either String Table
parse String
str =
case String -> Either (Located String) [Expr]
parseRawToml String
str of
Left Located String
e -> forall a b. a -> Either a b
Left (Located String -> String
prettyLocated Located String
e)
Right [Expr]
exprs ->
case [Expr] -> Either (Located SemanticError) Table
semantics [Expr]
exprs of
Left Located SemanticError
e -> forall a b. a -> Either a b
Left (Located String -> String
prettyLocated (SemanticError -> String
prettySemanticError forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Located SemanticError
e))
Right Table
tab -> forall a b. b -> Either a b
Right Table
tab
decode :: FromValue a => String -> Result String a
decode :: forall a. FromValue a => String -> Result String a
decode String
str =
case String -> Either String Table
parse String
str of
Left String
e -> forall e a. [e] -> Result e a
Failure [String
e]
Right Table
tab ->
case forall a. Matcher a -> Result MatchMessage a
runMatcher (forall a. FromValue a => Value -> Matcher a
fromValue (Table -> Value
Table Table
tab)) of
Failure [MatchMessage]
es -> forall e a. [e] -> Result e a
Failure (MatchMessage -> String
prettyMatchMessage forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [MatchMessage]
es)
Success [MatchMessage]
ws a
x -> forall e a. [e] -> a -> Result e a
Success (MatchMessage -> String
prettyMatchMessage forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [MatchMessage]
ws) a
x
encode :: ToTable a => a -> TomlDoc
encode :: forall a. ToTable a => a -> TomlDoc
encode = Table -> TomlDoc
prettyToml forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. ToTable a => a -> Table
toTable