packages feed

jsaddle-clib-0.9.0.0: src/Language/Javascript/JSaddle/CLib/Internal.hsc

{-# LANGUAGE ForeignFunctionInterface #-}
module Language.Javascript.JSaddle.CLib.Internal where

import Foreign
import Foreign.C

#include "jsaddle.h"

data NativeCallbacks = NativeCallbacks
  { _nativeCallbacks_jsaddleStart :: !(FunPtr (IO ())) -- void (jsaddleStart *)()
  , _nativeCallbacks_jsaddleResult :: !(FunPtr (CString -> IO ())) -- void (jsaddleResult *)(char *)
  , _nativeCallbacks_jsaddleSyncResult :: !(FunPtr (CString -> IO CString)) -- char * (jsaddleSyncResult *)(char *)
  , _nativeCallbacks_jsaddleJsData :: !CString -- char * jsaddleJsData
  , _nativeCallbacks_jsaddleHtmlData :: !CString -- char * jsaddleHtmlData
  }

instance Storable NativeCallbacks where
  sizeOf _ = #{size native_callbacks}
  alignment _ = #{alignment native_callbacks}
  poke p nc = do
    #{poke native_callbacks, jsaddleStart} p $ _nativeCallbacks_jsaddleStart nc
    #{poke native_callbacks, jsaddleResult} p $ _nativeCallbacks_jsaddleResult nc
    #{poke native_callbacks, jsaddleSyncResult} p $ _nativeCallbacks_jsaddleSyncResult nc
    #{poke native_callbacks, jsaddleJsData} p $ _nativeCallbacks_jsaddleJsData nc
    #{poke native_callbacks, jsaddleHtmlData} p $ _nativeCallbacks_jsaddleHtmlData nc
  peek p = NativeCallbacks
    <$> #{peek native_callbacks, jsaddleStart} p
    <*> #{peek native_callbacks, jsaddleResult} p
    <*> #{peek native_callbacks, jsaddleSyncResult} p
    <*> #{peek native_callbacks, jsaddleJsData} p
    <*> #{peek native_callbacks, jsaddleHtmlData} p

data AppCallbacks = AppCallbacks
  { _appCallbacks_mainActivity_onCreate :: !(FunPtr (IO ()))
  , _appCallbacks_mainActivity_onStart :: !(FunPtr (IO ()))
  , _appCallbacks_mainActivity_onResume :: !(FunPtr (IO ()))
  , _appCallbacks_mainActivity_onPause :: !(FunPtr (IO ()))
  , _appCallbacks_mainActivity_onStop :: !(FunPtr (IO ()))
  , _appCallbacks_mainActivity_onDestroy :: !(FunPtr (IO ()))
  , _appCallbacks_mainActivity_onRestart :: !(FunPtr (IO ()))
  , _appCallbacks_mainActivity_onNewIntent :: !(FunPtr (CString -> CString -> IO ()))
  , _appCallbacks_firebaseInstanceIdService_sendRegistrationToServer :: !(FunPtr (CString -> IO ()))
  }

instance Storable AppCallbacks where
  sizeOf _ = #{size app_callbacks}
  alignment _ = #{alignment app_callbacks}
  poke p nc = do
    #{poke app_callbacks, mainActivity_onCreate} p $ _appCallbacks_mainActivity_onCreate nc
    #{poke app_callbacks, mainActivity_onStart} p $ _appCallbacks_mainActivity_onStart nc
    #{poke app_callbacks, mainActivity_onResume} p $ _appCallbacks_mainActivity_onResume nc
    #{poke app_callbacks, mainActivity_onPause} p $ _appCallbacks_mainActivity_onPause nc
    #{poke app_callbacks, mainActivity_onStop} p $ _appCallbacks_mainActivity_onStop nc
    #{poke app_callbacks, mainActivity_onDestroy} p $ _appCallbacks_mainActivity_onDestroy nc
    #{poke app_callbacks, mainActivity_onRestart} p $ _appCallbacks_mainActivity_onRestart nc
    #{poke app_callbacks, mainActivity_onNewIntent} p $ _appCallbacks_mainActivity_onNewIntent nc
    #{poke app_callbacks, firebaseInstanceIdService_sendRegistrationToServer} p $ _appCallbacks_firebaseInstanceIdService_sendRegistrationToServer nc
  peek p = AppCallbacks
    <$> #{peek app_callbacks, mainActivity_onCreate} p
    <*> #{peek app_callbacks, mainActivity_onStart} p
    <*> #{peek app_callbacks, mainActivity_onResume} p
    <*> #{peek app_callbacks, mainActivity_onPause} p
    <*> #{peek app_callbacks, mainActivity_onStop} p
    <*> #{peek app_callbacks, mainActivity_onDestroy} p
    <*> #{peek app_callbacks, mainActivity_onRestart} p
    <*> #{peek app_callbacks, mainActivity_onNewIntent} p
    <*> #{peek app_callbacks, firebaseInstanceIdService_sendRegistrationToServer} p