module Argo.Decode where

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

decode :: FromValue.FromValue a => ByteString.ByteString -> Either String a
decode :: ByteString -> Either String a
decode ByteString
x = do
    Value
y <- Decoder Value -> ByteString -> Either String Value
forall a. Decoder a -> ByteString -> Either String 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) ByteString
x
    Value -> Either String a
forall a. FromValue a => Value -> Either String a
FromValue.fromValue Value
y

decodePointer :: ByteString.ByteString -> Either String Pointer.Pointer
decodePointer :: ByteString -> Either String Pointer
decodePointer = Decoder Pointer -> ByteString -> Either String Pointer
forall a. Decoder a -> ByteString -> Either String a
Decoder.run Decoder Pointer
Pointer.decode