module Argo.Decode where

import qualified Argo.Class.FromValue as FromValue
import qualified Argo.Decoder as Decoder
import qualified Argo.Json.Value as Value
import qualified Argo.Result as Result
import qualified Argo.Vendor.ByteString as ByteString

decode :: FromValue.FromValue a => ByteString.ByteString -> Result.Result a
decode :: ByteString -> Result a
decode ByteString
x =
    case Decoder Value -> ByteString -> Result (ByteString, Value)
forall a. Decoder a -> ByteString -> Result (ByteString, a)
Decoder.run (Decoder ()
Decoder.spaces Decoder () -> Decoder Value -> Decoder Value
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Decoder Value
Value.decode Decoder Value -> Decoder () -> Decoder Value
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Decoder ()
Decoder.eof) ByteString
x of
        Result.Failure String
e -> String -> Result a
forall a. String -> Result a
Result.Failure String
e
        Result.Success (ByteString
_, Value
y) -> Value -> Result a
forall a. FromValue a => Value -> Result a
FromValue.fromValue Value
y