ghcjs-fetch-0.1.0.0: src/GHCJS/Fetch/FFI.hs
{-# LANGUAGE CPP #-}
{-# LANGUAGE JavaScriptFFI #-}
module GHCJS.Fetch.FFI
( js_newRequest
, js_await
, js_fetch
, js_responseJSON
, js_responseText
, js_newHeaders
, js_appendHeader
) where
import GHC.Stack
import GHCJS.Fetch.Types
import GHCJS.Types
import JavaScript.Object
#ifdef ghcjs_HOST_OS
foreign import javascript safe "new Request($1, $2)" js_newRequest
:: JSString -> JSVal -> IO JSRequest
foreign import javascript interruptible
"$1.then(function(a) { $c({ 'val': a, 'success': true }); }, function(e) { $c({ 'val': e, 'success': false }); });"
js_await :: JSPromise a -> IO Object
foreign import javascript safe "fetch($1)" js_fetch ::
JSRequest -> IO (JSPromise JSResponse)
foreign import javascript safe "$1.json()" js_responseJSON ::
JSResponse -> IO (JSPromise JSVal)
foreign import javascript safe "$1.text()" js_responseText ::
JSResponse -> IO (JSPromise JSString)
foreign import javascript safe "new Headers()" js_newHeaders ::
IO JSHeaders
foreign import javascript safe "$1.append($2, $3);" js_appendHeader
:: JSHeaders -> JSString -> JSString -> IO ()
#else
ghcjsOnly :: HasCallStack => a
ghcjsOnly = error "This definition is only supported on ghcjs"
js_newRequest :: JSString -> JSVal -> IO JSRequest
js_newRequest = ghcjsOnly
js_await :: JSPromise a -> IO Object
js_await = ghcjsOnly
js_fetch :: JSRequest -> IO (JSPromise JSResponse)
js_fetch = ghcjsOnly
js_responseJSON :: JSResponse -> IO (JSPromise JSVal)
js_responseJSON = ghcjsOnly
js_responseText :: JSResponse -> IO (JSPromise JSString)
js_responseText = ghcjsOnly
js_newHeaders :: IO JSHeaders
js_newHeaders = ghcjsOnly
js_appendHeader :: JSHeaders -> JSString -> JSString -> IO ()
js_appendHeader = ghcjsOnly
#endif