module Web.VKHS.Error where
import Web.VKHS.Types
import Web.VKHS.Client (Response, Request, URL)
import qualified Web.VKHS.Client as Client
import Data.ByteString.Char8 (ByteString, unpack)
import Web.VKHS.Imports
data Error = ETimeout | EClient Client.Error
deriving(Show, Eq)
data CallRecovery =
ReExec MethodName MethodArgs
| ReParse JSON
deriving(Show)
type R t a = Result t a
data Result t a =
Fine a
| UnexpectedInt Error (Int -> t (R t a) (R t a))
| UnexpectedBool Error (Bool -> t (R t a) (R t a))
| UnexpectedURL Client.Error (URL -> t (R t a) (R t a))
| UnexpectedRequest Client.Error (Request -> t (R t a) (R t a))
| UnexpectedResponse Client.Error (Response -> t (R t a) (R t a))
| UnexpectedFormField Form String (String -> t (R t a) (R t a))
| LoginActionsExhausted
| RepeatedForm Form (() -> t (R t a) (R t a))
| JSONParseFailure ByteString (JSON -> t (R t a) (R t a))
| JSONParseFailure' JSON String
| JSONCovertionFailure (JSON, Text) (JSON -> t (R t a) (R t a))
| LogError Text (() -> t (R t a) (R t a))
| CallFailure (MethodName, MethodArgs, JSON, String) (CallRecovery -> t (R t a) (R t a))
data ResultDescription a =
DescFine a
| DescError String
deriving(Show)
describeResult :: (Show a) => Result t a -> Text
describeResult (Fine a) = "Fine " <> tshow a
describeResult (UnexpectedInt e k) = "UnexpectedInt " <> (tshow e)
describeResult (UnexpectedBool e k) = "UnexpectedBool " <> (tshow e)
describeResult (UnexpectedURL e k) = "UnexpectedURL " <> (tshow e)
describeResult (UnexpectedRequest e k) = "UnexpectedRequest " <> (tshow e)
describeResult LoginActionsExhausted = "LoginActionsExhausted"
describeResult (RepeatedForm f k) = "RepeatedForm"
describeResult (JSONParseFailure bs _) = "JSONParseFailure " <> (tshow bs)
describeResult (JSONParseFailure' JSON{..} s) = "JSONParseFailure' " <> (tshow s) <> " JSON: " <> (tpack $ take 1000 $ show js_aeson)
describeResult (LogError t k) = "LogError " <> (tshow t)
describeResult (JSONCovertionFailure j k) = "JSONConvertionFailure " <> (tshow j)
describeResult (CallFailure (n,args,j,err) k) = "CallFailure " <> tshow n <> " " <> tshow args