/*****************************************************************
 * File: "native-function-address.mustache"
 *
 * Native Function: {{ name }}
 *  - address: {{ target.address }}
 *  - Parameters: {{{ nativeParamTypes }}}
 *  - Ret: {{ retType }}
 ******************************************************************/

const __sidecar__{{ name }}_Function_wrapper = (() => {
  const nativeFunctionAddress =
  {{# target.moduleName }}
    Module.getBaseAddress('{{ target.moduleName }}')
  {{/ target.moduleName}}
  {{^ target.moduleName }}
    __sidecar__moduleBaseAddress
  {{/ target.moduleName}}
    .add({{ target.address }})

  const nativeFunction = new NativeFunction(
    nativeFunctionAddress,
    {{{ nativeRetType }}},
    {{{ nativeParamTypes }}},
  )

  return function (...args) {
    log.verbose(
      'SidecarAgent',
      '{{ name }}(%s)',
      args.join(', '),
    )

    {{{ declareNativeArgs }}}

    const ret = nativeFunction(...{{{ nativeArgs }}})
    return {{{ jsRet }}}
  }

})()
