{-# LANGUAGE DataKinds #-} {-# LANGUAGE OverloadedStrings #-} module Rollbar.Client.Internal ( DataResponse(..) , ResultResponse(..) , rollbar , baseUrl ) where import Data.Aeson import Data.Proxy (Proxy) import Network.HTTP.Req import Rollbar.Client.Settings newtype DataResponse a = DataResponse { forall a. DataResponse a -> a unDataResponse :: a } deriving (DataResponse a -> DataResponse a -> Bool (DataResponse a -> DataResponse a -> Bool) -> (DataResponse a -> DataResponse a -> Bool) -> Eq (DataResponse a) forall a. Eq a => DataResponse a -> DataResponse a -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: forall a. Eq a => DataResponse a -> DataResponse a -> Bool == :: DataResponse a -> DataResponse a -> Bool $c/= :: forall a. Eq a => DataResponse a -> DataResponse a -> Bool /= :: DataResponse a -> DataResponse a -> Bool Eq, Int -> DataResponse a -> ShowS [DataResponse a] -> ShowS DataResponse a -> String (Int -> DataResponse a -> ShowS) -> (DataResponse a -> String) -> ([DataResponse a] -> ShowS) -> Show (DataResponse a) forall a. Show a => Int -> DataResponse a -> ShowS forall a. Show a => [DataResponse a] -> ShowS forall a. Show a => DataResponse a -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: forall a. Show a => Int -> DataResponse a -> ShowS showsPrec :: Int -> DataResponse a -> ShowS $cshow :: forall a. Show a => DataResponse a -> String show :: DataResponse a -> String $cshowList :: forall a. Show a => [DataResponse a] -> ShowS showList :: [DataResponse a] -> ShowS Show) instance FromJSON a => FromJSON (DataResponse a) where parseJSON :: Value -> Parser (DataResponse a) parseJSON = String -> (Object -> Parser (DataResponse a)) -> Value -> Parser (DataResponse a) forall a. String -> (Object -> Parser a) -> Value -> Parser a withObject String "DataResponse" ((Object -> Parser (DataResponse a)) -> Value -> Parser (DataResponse a)) -> (Object -> Parser (DataResponse a)) -> Value -> Parser (DataResponse a) forall a b. (a -> b) -> a -> b $ \Object o -> a -> DataResponse a forall a. a -> DataResponse a DataResponse (a -> DataResponse a) -> Parser a -> Parser (DataResponse a) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Object o Object -> Key -> Parser a forall a. FromJSON a => Object -> Key -> Parser a .: Key "data" data ResultResponse a = ResultResponse { forall a. ResultResponse a -> Integer resultResponseErr :: Integer , forall a. ResultResponse a -> a resultResponseResult :: a } deriving (ResultResponse a -> ResultResponse a -> Bool (ResultResponse a -> ResultResponse a -> Bool) -> (ResultResponse a -> ResultResponse a -> Bool) -> Eq (ResultResponse a) forall a. Eq a => ResultResponse a -> ResultResponse a -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: forall a. Eq a => ResultResponse a -> ResultResponse a -> Bool == :: ResultResponse a -> ResultResponse a -> Bool $c/= :: forall a. Eq a => ResultResponse a -> ResultResponse a -> Bool /= :: ResultResponse a -> ResultResponse a -> Bool Eq, Int -> ResultResponse a -> ShowS [ResultResponse a] -> ShowS ResultResponse a -> String (Int -> ResultResponse a -> ShowS) -> (ResultResponse a -> String) -> ([ResultResponse a] -> ShowS) -> Show (ResultResponse a) forall a. Show a => Int -> ResultResponse a -> ShowS forall a. Show a => [ResultResponse a] -> ShowS forall a. Show a => ResultResponse a -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: forall a. Show a => Int -> ResultResponse a -> ShowS showsPrec :: Int -> ResultResponse a -> ShowS $cshow :: forall a. Show a => ResultResponse a -> String show :: ResultResponse a -> String $cshowList :: forall a. Show a => [ResultResponse a] -> ShowS showList :: [ResultResponse a] -> ShowS Show) instance FromJSON a => FromJSON (ResultResponse a) where parseJSON :: Value -> Parser (ResultResponse a) parseJSON = String -> (Object -> Parser (ResultResponse a)) -> Value -> Parser (ResultResponse a) forall a. String -> (Object -> Parser a) -> Value -> Parser a withObject String "ResultResponse" ((Object -> Parser (ResultResponse a)) -> Value -> Parser (ResultResponse a)) -> (Object -> Parser (ResultResponse a)) -> Value -> Parser (ResultResponse a) forall a b. (a -> b) -> a -> b $ \Object o -> Integer -> a -> ResultResponse a forall a. Integer -> a -> ResultResponse a ResultResponse (Integer -> a -> ResultResponse a) -> Parser Integer -> Parser (a -> ResultResponse a) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> Object o Object -> Key -> Parser Integer forall a. FromJSON a => Object -> Key -> Parser a .: Key "err" Parser (a -> ResultResponse a) -> Parser a -> Parser (ResultResponse a) forall a b. Parser (a -> b) -> Parser a -> Parser b forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b <*> Object o Object -> Key -> Parser a forall a. FromJSON a => Object -> Key -> Parser a .: Key "result" rollbar :: ( HasSettings m , HttpBody body , HttpBodyAllowed (AllowsBody method) (ProvidesBody body) , HttpMethod method , HttpResponse response , MonadHttp m ) => method -> Url 'Https -> body -> Proxy response -> m response rollbar :: forall (m :: * -> *) body method response. (HasSettings m, HttpBody body, HttpBodyAllowed (AllowsBody method) (ProvidesBody body), HttpMethod method, HttpResponse response, MonadHttp m) => method -> Url 'Https -> body -> Proxy response -> m response rollbar method method Url 'Https url body body Proxy response response = do Token ByteString token <- Settings -> Token settingsToken (Settings -> Token) -> m Settings -> m Token forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b <$> m Settings forall (m :: * -> *). HasSettings m => m Settings getSettings method -> Url 'Https -> body -> Proxy response -> Option 'Https -> m response forall (m :: * -> *) method body response (scheme :: Scheme). (MonadHttp m, HttpMethod method, HttpBody body, HttpResponse response, HttpBodyAllowed (AllowsBody method) (ProvidesBody body)) => method -> Url scheme -> body -> Proxy response -> Option scheme -> m response req method method Url 'Https url body body Proxy response response (Option 'Https -> m response) -> Option 'Https -> m response forall a b. (a -> b) -> a -> b $ ByteString -> ByteString -> Option 'Https forall (scheme :: Scheme). ByteString -> ByteString -> Option scheme header ByteString "X-Rollbar-Access-Token" ByteString token baseUrl :: Url 'Https baseUrl :: Url 'Https baseUrl = Text -> Url 'Https https Text "api.rollbar.com" Url 'Https -> Text -> Url 'Https forall (scheme :: Scheme). Url scheme -> Text -> Url scheme /: Text "api" Url 'Https -> Text -> Url 'Https forall (scheme :: Scheme). Url scheme -> Text -> Url scheme /: Text "1"