module Text.ValveVKV(vkvParser, parseValveVKV, fromValveVKV, (.:), (^:), unpair, ValveVKV,
ValveKeyValueEntry(KVObject, KVInt, KVString), Pair (Pair), Context, parseToVKV) where
import Text.Parsec
import Text.ValveVKV.Internal
import Text.ValveVKV.Class
import Data.Maybe (mapMaybe)
parseValveVKV :: ValveVKV a => String -> Maybe a
parseValveVKV :: String -> Maybe a
parseValveVKV String
input =
let parseRes :: Either ParseError [ValveKeyValueEntry]
parseRes = Parsec String () [ValveKeyValueEntry]
-> String -> String -> Either ParseError [ValveKeyValueEntry]
forall s t a.
Stream s Identity t =>
Parsec s () a -> String -> s -> Either ParseError a
parse Parsec String () [ValveKeyValueEntry]
vkvParser String
"" String
input in
case Either ParseError [ValveKeyValueEntry]
parseRes of
Left ParseError
_ -> Maybe a
forall a. Maybe a
Nothing
Right [ValveKeyValueEntry]
a ->
let topObj :: ValveKeyValueEntry
topObj = Pair [ValveKeyValueEntry] -> ValveKeyValueEntry
KVObject (String -> [ValveKeyValueEntry] -> Pair [ValveKeyValueEntry]
forall a. String -> a -> Pair a
Pair String
"top" [ValveKeyValueEntry]
a) in
ValveKeyValueEntry -> ValveKeyValueEntry -> Maybe a
forall a.
ValveVKV a =>
ValveKeyValueEntry -> ValveKeyValueEntry -> Maybe a
fromValveVKV ValveKeyValueEntry
topObj ValveKeyValueEntry
topObj
parseToVKV :: String -> Either ParseError [ValveKeyValueEntry]
parseToVKV :: String -> Either ParseError [ValveKeyValueEntry]
parseToVKV = Parsec String () [ValveKeyValueEntry]
-> String -> String -> Either ParseError [ValveKeyValueEntry]
forall s t a.
Stream s Identity t =>
Parsec s () a -> String -> s -> Either ParseError a
parse Parsec String () [ValveKeyValueEntry]
vkvParser String
""