/**
 * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
 *
 * Do not edit this file as changes may cause incorrect behavior and will be lost
 * once the code is regenerated.
 *
 * @generated by codegen project: GenerateModuleH.js
 */

#pragma once

#include <ReactCommon/TurboModule.h>
#include <react/bridging/Bridging.h>

namespace facebook::react {


#pragma mark - NativeRNFBTurboFirestoreFirestoreLoadBundleTaskProgress

template <typename P0, typename P1, typename P2, typename P3, typename P4>
struct NativeRNFBTurboFirestoreFirestoreLoadBundleTaskProgress {
  P0 bytesLoaded{};
  P1 documentsLoaded{};
  P2 totalBytes{};
  P3 totalDocuments{};
  P4 taskState;
  bool operator==(const NativeRNFBTurboFirestoreFirestoreLoadBundleTaskProgress &other) const {
    return bytesLoaded == other.bytesLoaded && documentsLoaded == other.documentsLoaded && totalBytes == other.totalBytes && totalDocuments == other.totalDocuments && taskState == other.taskState;
  }
};

template <typename T>
struct NativeRNFBTurboFirestoreFirestoreLoadBundleTaskProgressBridging {
  static T types;

  static T fromJs(
      jsi::Runtime &rt,
      const jsi::Object &value,
      const std::shared_ptr<CallInvoker> &jsInvoker) {
    T result{
      bridging::fromJs<decltype(types.bytesLoaded)>(rt, value.getProperty(rt, "bytesLoaded"), jsInvoker),
      bridging::fromJs<decltype(types.documentsLoaded)>(rt, value.getProperty(rt, "documentsLoaded"), jsInvoker),
      bridging::fromJs<decltype(types.totalBytes)>(rt, value.getProperty(rt, "totalBytes"), jsInvoker),
      bridging::fromJs<decltype(types.totalDocuments)>(rt, value.getProperty(rt, "totalDocuments"), jsInvoker),
      bridging::fromJs<decltype(types.taskState)>(rt, value.getProperty(rt, "taskState"), jsInvoker)};
    return result;
  }

#ifdef DEBUG
  static double bytesLoadedToJs(jsi::Runtime &rt, decltype(types.bytesLoaded) value) {
    return bridging::toJs(rt, value);
  }
  static double documentsLoadedToJs(jsi::Runtime &rt, decltype(types.documentsLoaded) value) {
    return bridging::toJs(rt, value);
  }
  static double totalBytesToJs(jsi::Runtime &rt, decltype(types.totalBytes) value) {
    return bridging::toJs(rt, value);
  }
  static double totalDocumentsToJs(jsi::Runtime &rt, decltype(types.totalDocuments) value) {
    return bridging::toJs(rt, value);
  }
  static jsi::String taskStateToJs(jsi::Runtime &rt, decltype(types.taskState) value) {
    return bridging::toJs(rt, value);
  }
#endif

  static jsi::Object toJs(
      jsi::Runtime &rt,
      const T &value,
      const std::shared_ptr<CallInvoker> &jsInvoker) {
    auto result = facebook::jsi::Object(rt);
    result.setProperty(rt, "bytesLoaded", bridging::toJs(rt, value.bytesLoaded, jsInvoker));
    result.setProperty(rt, "documentsLoaded", bridging::toJs(rt, value.documentsLoaded, jsInvoker));
    result.setProperty(rt, "totalBytes", bridging::toJs(rt, value.totalBytes, jsInvoker));
    result.setProperty(rt, "totalDocuments", bridging::toJs(rt, value.totalDocuments, jsInvoker));
    result.setProperty(rt, "taskState", bridging::toJs(rt, value.taskState, jsInvoker));
    return result;
  }
};


template <typename T>
class JSI_EXPORT NativeRNFBTurboFirestoreCxxSpec : public TurboModule {
public:
  static constexpr std::string_view kModuleName = "NativeRNFBTurboFirestore";

protected:
  NativeRNFBTurboFirestoreCxxSpec(std::shared_ptr<CallInvoker> jsInvoker) : TurboModule(std::string{NativeRNFBTurboFirestoreCxxSpec::kModuleName}, jsInvoker) {
    methodMap_["setLogLevel"] = MethodMetadata {.argCount = 1, .invoker = __setLogLevel};
    methodMap_["loadBundle"] = MethodMetadata {.argCount = 3, .invoker = __loadBundle};
    methodMap_["clearPersistence"] = MethodMetadata {.argCount = 2, .invoker = __clearPersistence};
    methodMap_["waitForPendingWrites"] = MethodMetadata {.argCount = 2, .invoker = __waitForPendingWrites};
    methodMap_["disableNetwork"] = MethodMetadata {.argCount = 2, .invoker = __disableNetwork};
    methodMap_["enableNetwork"] = MethodMetadata {.argCount = 2, .invoker = __enableNetwork};
    methodMap_["useEmulator"] = MethodMetadata {.argCount = 4, .invoker = __useEmulator};
    methodMap_["settings"] = MethodMetadata {.argCount = 3, .invoker = __settings};
    methodMap_["terminate"] = MethodMetadata {.argCount = 2, .invoker = __terminate};
    methodMap_["persistenceCacheIndexManager"] = MethodMetadata {.argCount = 3, .invoker = __persistenceCacheIndexManager};
    methodMap_["addSnapshotsInSync"] = MethodMetadata {.argCount = 3, .invoker = __addSnapshotsInSync};
    methodMap_["removeSnapshotsInSync"] = MethodMetadata {.argCount = 3, .invoker = __removeSnapshotsInSync};
  }
  
private:
  static jsi::Value __setLogLevel(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::setLogLevel) == 2,
      "Expected setLogLevel(...) to have 2 parameters");
    bridging::callFromJs<void>(rt, &T::setLogLevel,  static_cast<NativeRNFBTurboFirestoreCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt));return jsi::Value::undefined();
  }

  static jsi::Value __loadBundle(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::loadBundle) == 4,
      "Expected loadBundle(...) to have 4 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::loadBundle,  static_cast<NativeRNFBTurboFirestoreCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt),
      count <= 2 ? throw jsi::JSError(rt, "Expected argument in position 2 to be passed") : args[2].asString(rt));
  }

  static jsi::Value __clearPersistence(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::clearPersistence) == 3,
      "Expected clearPersistence(...) to have 3 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::clearPersistence,  static_cast<NativeRNFBTurboFirestoreCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt));
  }

  static jsi::Value __waitForPendingWrites(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::waitForPendingWrites) == 3,
      "Expected waitForPendingWrites(...) to have 3 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::waitForPendingWrites,  static_cast<NativeRNFBTurboFirestoreCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt));
  }

  static jsi::Value __disableNetwork(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::disableNetwork) == 3,
      "Expected disableNetwork(...) to have 3 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::disableNetwork,  static_cast<NativeRNFBTurboFirestoreCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt));
  }

  static jsi::Value __enableNetwork(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::enableNetwork) == 3,
      "Expected enableNetwork(...) to have 3 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::enableNetwork,  static_cast<NativeRNFBTurboFirestoreCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt));
  }

  static jsi::Value __useEmulator(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::useEmulator) == 5,
      "Expected useEmulator(...) to have 5 parameters");
    bridging::callFromJs<void>(rt, &T::useEmulator,  static_cast<NativeRNFBTurboFirestoreCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt),
      count <= 2 ? throw jsi::JSError(rt, "Expected argument in position 2 to be passed") : args[2].asString(rt),
      count <= 3 ? throw jsi::JSError(rt, "Expected argument in position 3 to be passed") : args[3].asNumber());return jsi::Value::undefined();
  }

  static jsi::Value __settings(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::settings) == 4,
      "Expected settings(...) to have 4 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::settings,  static_cast<NativeRNFBTurboFirestoreCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt),
      count <= 2 ? throw jsi::JSError(rt, "Expected argument in position 2 to be passed") : args[2].asObject(rt));
  }

  static jsi::Value __terminate(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::terminate) == 3,
      "Expected terminate(...) to have 3 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::terminate,  static_cast<NativeRNFBTurboFirestoreCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt));
  }

  static jsi::Value __persistenceCacheIndexManager(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::persistenceCacheIndexManager) == 4,
      "Expected persistenceCacheIndexManager(...) to have 4 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::persistenceCacheIndexManager,  static_cast<NativeRNFBTurboFirestoreCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt),
      count <= 2 ? throw jsi::JSError(rt, "Expected argument in position 2 to be passed") : args[2].asNumber());
  }

  static jsi::Value __addSnapshotsInSync(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::addSnapshotsInSync) == 4,
      "Expected addSnapshotsInSync(...) to have 4 parameters");
    bridging::callFromJs<void>(rt, &T::addSnapshotsInSync,  static_cast<NativeRNFBTurboFirestoreCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt),
      count <= 2 ? throw jsi::JSError(rt, "Expected argument in position 2 to be passed") : args[2].asNumber());return jsi::Value::undefined();
  }

  static jsi::Value __removeSnapshotsInSync(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::removeSnapshotsInSync) == 4,
      "Expected removeSnapshotsInSync(...) to have 4 parameters");
    bridging::callFromJs<void>(rt, &T::removeSnapshotsInSync,  static_cast<NativeRNFBTurboFirestoreCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt),
      count <= 2 ? throw jsi::JSError(rt, "Expected argument in position 2 to be passed") : args[2].asNumber());return jsi::Value::undefined();
  }
};


#pragma mark - NativeRNFBTurboFirestoreCollectionFirestoreCollectionCountResult

template <typename P0>
struct NativeRNFBTurboFirestoreCollectionFirestoreCollectionCountResult {
  P0 count;
  bool operator==(const NativeRNFBTurboFirestoreCollectionFirestoreCollectionCountResult &other) const {
    return count == other.count;
  }
};

template <typename T>
struct NativeRNFBTurboFirestoreCollectionFirestoreCollectionCountResultBridging {
  static T types;

  static T fromJs(
      jsi::Runtime &rt,
      const jsi::Object &value,
      const std::shared_ptr<CallInvoker> &jsInvoker) {
    T result{
      bridging::fromJs<decltype(types.count)>(rt, value.getProperty(rt, "count"), jsInvoker)};
    return result;
  }

#ifdef DEBUG
  static double countToJs(jsi::Runtime &rt, decltype(types.count) value) {
    return bridging::toJs(rt, value);
  }
#endif

  static jsi::Object toJs(
      jsi::Runtime &rt,
      const T &value,
      const std::shared_ptr<CallInvoker> &jsInvoker) {
    auto result = facebook::jsi::Object(rt);
    if (value.count) {
      result.setProperty(rt, "count", bridging::toJs(rt, value.count.value(), jsInvoker));
    }
    return result;
  }
};


template <typename T>
class JSI_EXPORT NativeRNFBTurboFirestoreCollectionCxxSpec : public TurboModule {
public:
  static constexpr std::string_view kModuleName = "NativeRNFBTurboFirestoreCollection";

protected:
  NativeRNFBTurboFirestoreCollectionCxxSpec(std::shared_ptr<CallInvoker> jsInvoker) : TurboModule(std::string{NativeRNFBTurboFirestoreCollectionCxxSpec::kModuleName}, jsInvoker) {
    methodMap_["namedQueryOnSnapshot"] = MethodMetadata {.argCount = 9, .invoker = __namedQueryOnSnapshot};
    methodMap_["collectionOnSnapshot"] = MethodMetadata {.argCount = 9, .invoker = __collectionOnSnapshot};
    methodMap_["collectionOffSnapshot"] = MethodMetadata {.argCount = 3, .invoker = __collectionOffSnapshot};
    methodMap_["namedQueryGet"] = MethodMetadata {.argCount = 8, .invoker = __namedQueryGet};
    methodMap_["collectionGet"] = MethodMetadata {.argCount = 8, .invoker = __collectionGet};
    methodMap_["collectionCount"] = MethodMetadata {.argCount = 7, .invoker = __collectionCount};
    methodMap_["aggregateQuery"] = MethodMetadata {.argCount = 8, .invoker = __aggregateQuery};
    methodMap_["pipelineExecute"] = MethodMetadata {.argCount = 4, .invoker = __pipelineExecute};
  }
  
private:
  static jsi::Value __namedQueryOnSnapshot(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::namedQueryOnSnapshot) == 10,
      "Expected namedQueryOnSnapshot(...) to have 10 parameters");
    bridging::callFromJs<void>(rt, &T::namedQueryOnSnapshot,  static_cast<NativeRNFBTurboFirestoreCollectionCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt),
      count <= 2 ? throw jsi::JSError(rt, "Expected argument in position 2 to be passed") : args[2].asString(rt),
      count <= 3 ? throw jsi::JSError(rt, "Expected argument in position 3 to be passed") : args[3].asString(rt),
      count <= 4 ? throw jsi::JSError(rt, "Expected argument in position 4 to be passed") : args[4].asObject(rt).asArray(rt),
      count <= 5 ? throw jsi::JSError(rt, "Expected argument in position 5 to be passed") : args[5].asObject(rt).asArray(rt),
      count <= 6 ? throw jsi::JSError(rt, "Expected argument in position 6 to be passed") : args[6].asObject(rt),
      count <= 7 ? throw jsi::JSError(rt, "Expected argument in position 7 to be passed") : args[7].asNumber(),
      count <= 8 ? throw jsi::JSError(rt, "Expected argument in position 8 to be passed") : args[8].asObject(rt));return jsi::Value::undefined();
  }

  static jsi::Value __collectionOnSnapshot(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::collectionOnSnapshot) == 10,
      "Expected collectionOnSnapshot(...) to have 10 parameters");
    bridging::callFromJs<void>(rt, &T::collectionOnSnapshot,  static_cast<NativeRNFBTurboFirestoreCollectionCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt),
      count <= 2 ? throw jsi::JSError(rt, "Expected argument in position 2 to be passed") : args[2].asString(rt),
      count <= 3 ? throw jsi::JSError(rt, "Expected argument in position 3 to be passed") : args[3].asString(rt),
      count <= 4 ? throw jsi::JSError(rt, "Expected argument in position 4 to be passed") : args[4].asObject(rt).asArray(rt),
      count <= 5 ? throw jsi::JSError(rt, "Expected argument in position 5 to be passed") : args[5].asObject(rt).asArray(rt),
      count <= 6 ? throw jsi::JSError(rt, "Expected argument in position 6 to be passed") : args[6].asObject(rt),
      count <= 7 ? throw jsi::JSError(rt, "Expected argument in position 7 to be passed") : args[7].asNumber(),
      count <= 8 ? throw jsi::JSError(rt, "Expected argument in position 8 to be passed") : args[8].asObject(rt));return jsi::Value::undefined();
  }

  static jsi::Value __collectionOffSnapshot(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::collectionOffSnapshot) == 4,
      "Expected collectionOffSnapshot(...) to have 4 parameters");
    bridging::callFromJs<void>(rt, &T::collectionOffSnapshot,  static_cast<NativeRNFBTurboFirestoreCollectionCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt),
      count <= 2 ? throw jsi::JSError(rt, "Expected argument in position 2 to be passed") : args[2].asNumber());return jsi::Value::undefined();
  }

  static jsi::Value __namedQueryGet(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::namedQueryGet) == 9,
      "Expected namedQueryGet(...) to have 9 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::namedQueryGet,  static_cast<NativeRNFBTurboFirestoreCollectionCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt),
      count <= 2 ? throw jsi::JSError(rt, "Expected argument in position 2 to be passed") : args[2].asString(rt),
      count <= 3 ? throw jsi::JSError(rt, "Expected argument in position 3 to be passed") : args[3].asString(rt),
      count <= 4 ? throw jsi::JSError(rt, "Expected argument in position 4 to be passed") : args[4].asObject(rt).asArray(rt),
      count <= 5 ? throw jsi::JSError(rt, "Expected argument in position 5 to be passed") : args[5].asObject(rt).asArray(rt),
      count <= 6 ? throw jsi::JSError(rt, "Expected argument in position 6 to be passed") : args[6].asObject(rt),
      count <= 7 || args[7].isUndefined() ? std::nullopt : std::make_optional(args[7].asObject(rt)));
  }

  static jsi::Value __collectionGet(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::collectionGet) == 9,
      "Expected collectionGet(...) to have 9 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::collectionGet,  static_cast<NativeRNFBTurboFirestoreCollectionCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt),
      count <= 2 ? throw jsi::JSError(rt, "Expected argument in position 2 to be passed") : args[2].asString(rt),
      count <= 3 ? throw jsi::JSError(rt, "Expected argument in position 3 to be passed") : args[3].asString(rt),
      count <= 4 ? throw jsi::JSError(rt, "Expected argument in position 4 to be passed") : args[4].asObject(rt).asArray(rt),
      count <= 5 ? throw jsi::JSError(rt, "Expected argument in position 5 to be passed") : args[5].asObject(rt).asArray(rt),
      count <= 6 ? throw jsi::JSError(rt, "Expected argument in position 6 to be passed") : args[6].asObject(rt),
      count <= 7 || args[7].isUndefined() ? std::nullopt : std::make_optional(args[7].asObject(rt)));
  }

  static jsi::Value __collectionCount(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::collectionCount) == 8,
      "Expected collectionCount(...) to have 8 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::collectionCount,  static_cast<NativeRNFBTurboFirestoreCollectionCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt),
      count <= 2 ? throw jsi::JSError(rt, "Expected argument in position 2 to be passed") : args[2].asString(rt),
      count <= 3 ? throw jsi::JSError(rt, "Expected argument in position 3 to be passed") : args[3].asString(rt),
      count <= 4 ? throw jsi::JSError(rt, "Expected argument in position 4 to be passed") : args[4].asObject(rt).asArray(rt),
      count <= 5 ? throw jsi::JSError(rt, "Expected argument in position 5 to be passed") : args[5].asObject(rt).asArray(rt),
      count <= 6 ? throw jsi::JSError(rt, "Expected argument in position 6 to be passed") : args[6].asObject(rt));
  }

  static jsi::Value __aggregateQuery(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::aggregateQuery) == 9,
      "Expected aggregateQuery(...) to have 9 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::aggregateQuery,  static_cast<NativeRNFBTurboFirestoreCollectionCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt),
      count <= 2 ? throw jsi::JSError(rt, "Expected argument in position 2 to be passed") : args[2].asString(rt),
      count <= 3 ? throw jsi::JSError(rt, "Expected argument in position 3 to be passed") : args[3].asString(rt),
      count <= 4 ? throw jsi::JSError(rt, "Expected argument in position 4 to be passed") : args[4].asObject(rt).asArray(rt),
      count <= 5 ? throw jsi::JSError(rt, "Expected argument in position 5 to be passed") : args[5].asObject(rt).asArray(rt),
      count <= 6 ? throw jsi::JSError(rt, "Expected argument in position 6 to be passed") : args[6].asObject(rt),
      count <= 7 ? throw jsi::JSError(rt, "Expected argument in position 7 to be passed") : args[7].asObject(rt).asArray(rt));
  }

  static jsi::Value __pipelineExecute(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::pipelineExecute) == 5,
      "Expected pipelineExecute(...) to have 5 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::pipelineExecute,  static_cast<NativeRNFBTurboFirestoreCollectionCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt),
      count <= 2 ? throw jsi::JSError(rt, "Expected argument in position 2 to be passed") : args[2].asObject(rt),
      count <= 3 || args[3].isUndefined() ? std::nullopt : std::make_optional(args[3].asObject(rt)));
  }
};


#pragma mark - NativeRNFBTurboFirestoreDocumentFirestoreSnapshotListenOptions

template <typename P0, typename P1>
struct NativeRNFBTurboFirestoreDocumentFirestoreSnapshotListenOptions {
  P0 includeMetadataChanges{};
  P1 source;
  bool operator==(const NativeRNFBTurboFirestoreDocumentFirestoreSnapshotListenOptions &other) const {
    return includeMetadataChanges == other.includeMetadataChanges && source == other.source;
  }
};

template <typename T>
struct NativeRNFBTurboFirestoreDocumentFirestoreSnapshotListenOptionsBridging {
  static T types;

  static T fromJs(
      jsi::Runtime &rt,
      const jsi::Object &value,
      const std::shared_ptr<CallInvoker> &jsInvoker) {
    T result{
      bridging::fromJs<decltype(types.includeMetadataChanges)>(rt, value.getProperty(rt, "includeMetadataChanges"), jsInvoker),
      bridging::fromJs<decltype(types.source)>(rt, value.getProperty(rt, "source"), jsInvoker)};
    return result;
  }

#ifdef DEBUG
  static bool includeMetadataChangesToJs(jsi::Runtime &rt, decltype(types.includeMetadataChanges) value) {
    return bridging::toJs(rt, value);
  }
  static jsi::String sourceToJs(jsi::Runtime &rt, decltype(types.source) value) {
    return bridging::toJs(rt, value);
  }
#endif

  static jsi::Object toJs(
      jsi::Runtime &rt,
      const T &value,
      const std::shared_ptr<CallInvoker> &jsInvoker) {
    auto result = facebook::jsi::Object(rt);
    if (value.includeMetadataChanges) {
      result.setProperty(rt, "includeMetadataChanges", bridging::toJs(rt, value.includeMetadataChanges.value(), jsInvoker));
    }
    if (value.source) {
      result.setProperty(rt, "source", bridging::toJs(rt, value.source.value(), jsInvoker));
    }
    return result;
  }
};


template <typename T>
class JSI_EXPORT NativeRNFBTurboFirestoreDocumentCxxSpec : public TurboModule {
public:
  static constexpr std::string_view kModuleName = "NativeRNFBTurboFirestoreDocument";

protected:
  NativeRNFBTurboFirestoreDocumentCxxSpec(std::shared_ptr<CallInvoker> jsInvoker) : TurboModule(std::string{NativeRNFBTurboFirestoreDocumentCxxSpec::kModuleName}, jsInvoker) {
    methodMap_["documentOnSnapshot"] = MethodMetadata {.argCount = 5, .invoker = __documentOnSnapshot};
    methodMap_["documentOffSnapshot"] = MethodMetadata {.argCount = 3, .invoker = __documentOffSnapshot};
    methodMap_["documentGet"] = MethodMetadata {.argCount = 4, .invoker = __documentGet};
    methodMap_["documentDelete"] = MethodMetadata {.argCount = 3, .invoker = __documentDelete};
    methodMap_["documentSet"] = MethodMetadata {.argCount = 5, .invoker = __documentSet};
    methodMap_["documentUpdate"] = MethodMetadata {.argCount = 4, .invoker = __documentUpdate};
    methodMap_["documentBatch"] = MethodMetadata {.argCount = 3, .invoker = __documentBatch};
  }
  
private:
  static jsi::Value __documentOnSnapshot(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::documentOnSnapshot) == 6,
      "Expected documentOnSnapshot(...) to have 6 parameters");
    bridging::callFromJs<void>(rt, &T::documentOnSnapshot,  static_cast<NativeRNFBTurboFirestoreDocumentCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt),
      count <= 2 ? throw jsi::JSError(rt, "Expected argument in position 2 to be passed") : args[2].asString(rt),
      count <= 3 ? throw jsi::JSError(rt, "Expected argument in position 3 to be passed") : args[3].asNumber(),
      count <= 4 ? throw jsi::JSError(rt, "Expected argument in position 4 to be passed") : args[4].asObject(rt));return jsi::Value::undefined();
  }

  static jsi::Value __documentOffSnapshot(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::documentOffSnapshot) == 4,
      "Expected documentOffSnapshot(...) to have 4 parameters");
    bridging::callFromJs<void>(rt, &T::documentOffSnapshot,  static_cast<NativeRNFBTurboFirestoreDocumentCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt),
      count <= 2 ? throw jsi::JSError(rt, "Expected argument in position 2 to be passed") : args[2].asNumber());return jsi::Value::undefined();
  }

  static jsi::Value __documentGet(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::documentGet) == 5,
      "Expected documentGet(...) to have 5 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::documentGet,  static_cast<NativeRNFBTurboFirestoreDocumentCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt),
      count <= 2 ? throw jsi::JSError(rt, "Expected argument in position 2 to be passed") : args[2].asString(rt),
      count <= 3 || args[3].isUndefined() ? std::nullopt : std::make_optional(args[3].asObject(rt)));
  }

  static jsi::Value __documentDelete(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::documentDelete) == 4,
      "Expected documentDelete(...) to have 4 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::documentDelete,  static_cast<NativeRNFBTurboFirestoreDocumentCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt),
      count <= 2 ? throw jsi::JSError(rt, "Expected argument in position 2 to be passed") : args[2].asString(rt));
  }

  static jsi::Value __documentSet(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::documentSet) == 6,
      "Expected documentSet(...) to have 6 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::documentSet,  static_cast<NativeRNFBTurboFirestoreDocumentCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt),
      count <= 2 ? throw jsi::JSError(rt, "Expected argument in position 2 to be passed") : args[2].asString(rt),
      count <= 3 ? throw jsi::JSError(rt, "Expected argument in position 3 to be passed") : args[3].asObject(rt),
      count <= 4 ? throw jsi::JSError(rt, "Expected argument in position 4 to be passed") : args[4].asObject(rt));
  }

  static jsi::Value __documentUpdate(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::documentUpdate) == 5,
      "Expected documentUpdate(...) to have 5 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::documentUpdate,  static_cast<NativeRNFBTurboFirestoreDocumentCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt),
      count <= 2 ? throw jsi::JSError(rt, "Expected argument in position 2 to be passed") : args[2].asString(rt),
      count <= 3 ? throw jsi::JSError(rt, "Expected argument in position 3 to be passed") : args[3].asObject(rt));
  }

  static jsi::Value __documentBatch(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::documentBatch) == 4,
      "Expected documentBatch(...) to have 4 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::documentBatch,  static_cast<NativeRNFBTurboFirestoreDocumentCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt),
      count <= 2 ? throw jsi::JSError(rt, "Expected argument in position 2 to be passed") : args[2].asObject(rt).asArray(rt));
  }
};


template <typename T>
class JSI_EXPORT NativeRNFBTurboFirestoreTransactionCxxSpec : public TurboModule {
public:
  static constexpr std::string_view kModuleName = "NativeRNFBTurboFirestoreTransaction";

protected:
  NativeRNFBTurboFirestoreTransactionCxxSpec(std::shared_ptr<CallInvoker> jsInvoker) : TurboModule(std::string{NativeRNFBTurboFirestoreTransactionCxxSpec::kModuleName}, jsInvoker) {
    methodMap_["transactionBegin"] = MethodMetadata {.argCount = 4, .invoker = __transactionBegin};
    methodMap_["transactionGetDocument"] = MethodMetadata {.argCount = 4, .invoker = __transactionGetDocument};
    methodMap_["transactionDispose"] = MethodMetadata {.argCount = 3, .invoker = __transactionDispose};
    methodMap_["transactionApplyBuffer"] = MethodMetadata {.argCount = 4, .invoker = __transactionApplyBuffer};
  }
  
private:
  static jsi::Value __transactionBegin(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::transactionBegin) == 5,
      "Expected transactionBegin(...) to have 5 parameters");
    bridging::callFromJs<void>(rt, &T::transactionBegin,  static_cast<NativeRNFBTurboFirestoreTransactionCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt),
      count <= 2 ? throw jsi::JSError(rt, "Expected argument in position 2 to be passed") : args[2].asNumber(),
      count <= 3 ? throw jsi::JSError(rt, "Expected argument in position 3 to be passed") : args[3].asNumber());return jsi::Value::undefined();
  }

  static jsi::Value __transactionGetDocument(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::transactionGetDocument) == 5,
      "Expected transactionGetDocument(...) to have 5 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::transactionGetDocument,  static_cast<NativeRNFBTurboFirestoreTransactionCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt),
      count <= 2 ? throw jsi::JSError(rt, "Expected argument in position 2 to be passed") : args[2].asNumber(),
      count <= 3 ? throw jsi::JSError(rt, "Expected argument in position 3 to be passed") : args[3].asString(rt));
  }

  static jsi::Value __transactionDispose(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::transactionDispose) == 4,
      "Expected transactionDispose(...) to have 4 parameters");
    bridging::callFromJs<void>(rt, &T::transactionDispose,  static_cast<NativeRNFBTurboFirestoreTransactionCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt),
      count <= 2 ? throw jsi::JSError(rt, "Expected argument in position 2 to be passed") : args[2].asNumber());return jsi::Value::undefined();
  }

  static jsi::Value __transactionApplyBuffer(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::transactionApplyBuffer) == 5,
      "Expected transactionApplyBuffer(...) to have 5 parameters");
    bridging::callFromJs<void>(rt, &T::transactionApplyBuffer,  static_cast<NativeRNFBTurboFirestoreTransactionCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
      count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
      count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asString(rt),
      count <= 2 ? throw jsi::JSError(rt, "Expected argument in position 2 to be passed") : args[2].asNumber(),
      count <= 3 ? throw jsi::JSError(rt, "Expected argument in position 3 to be passed") : args[3].asObject(rt).asArray(rt));return jsi::Value::undefined();
  }
};

} // namespace facebook::react
