/**
 * 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 - NativeRNFBTurboStorageStorageListOptions

template <typename P0, typename P1>
struct NativeRNFBTurboStorageStorageListOptions {
  P0 maxResults{};
  P1 pageToken;
  bool operator==(const NativeRNFBTurboStorageStorageListOptions &other) const {
    return maxResults == other.maxResults && pageToken == other.pageToken;
  }
};

template <typename T>
struct NativeRNFBTurboStorageStorageListOptionsBridging {
  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.maxResults)>(rt, value.getProperty(rt, "maxResults"), jsInvoker),
      bridging::fromJs<decltype(types.pageToken)>(rt, value.getProperty(rt, "pageToken"), jsInvoker)};
    return result;
  }

#ifdef DEBUG
  static double maxResultsToJs(jsi::Runtime &rt, decltype(types.maxResults) value) {
    return bridging::toJs(rt, value);
  }
  static std::optional<jsi::String> pageTokenToJs(jsi::Runtime &rt, decltype(types.pageToken) 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, "maxResults", bridging::toJs(rt, value.maxResults, jsInvoker));
    if (value.pageToken) {
      result.setProperty(rt, "pageToken", bridging::toJs(rt, value.pageToken.value(), jsInvoker));
    }
    return result;
  }
};


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

protected:
  NativeRNFBTurboStorageCxxSpec(std::shared_ptr<CallInvoker> jsInvoker) : TurboModule(std::string{NativeRNFBTurboStorageCxxSpec::kModuleName}, jsInvoker) {
    methodMap_["getConstants"] = MethodMetadata {.argCount = 0, .invoker = __getConstants};
    methodMap_["deleteObject"] = MethodMetadata {.argCount = 2, .invoker = __deleteObject};
    methodMap_["getDownloadURL"] = MethodMetadata {.argCount = 2, .invoker = __getDownloadURL};
    methodMap_["getMetadata"] = MethodMetadata {.argCount = 2, .invoker = __getMetadata};
    methodMap_["updateMetadata"] = MethodMetadata {.argCount = 3, .invoker = __updateMetadata};
    methodMap_["list"] = MethodMetadata {.argCount = 3, .invoker = __list};
    methodMap_["listAll"] = MethodMetadata {.argCount = 2, .invoker = __listAll};
    methodMap_["setMaxDownloadRetryTime"] = MethodMetadata {.argCount = 2, .invoker = __setMaxDownloadRetryTime};
    methodMap_["setMaxOperationRetryTime"] = MethodMetadata {.argCount = 2, .invoker = __setMaxOperationRetryTime};
    methodMap_["setMaxUploadRetryTime"] = MethodMetadata {.argCount = 2, .invoker = __setMaxUploadRetryTime};
    methodMap_["useEmulator"] = MethodMetadata {.argCount = 4, .invoker = __useEmulator};
    methodMap_["writeToFile"] = MethodMetadata {.argCount = 4, .invoker = __writeToFile};
    methodMap_["putFile"] = MethodMetadata {.argCount = 5, .invoker = __putFile};
    methodMap_["putString"] = MethodMetadata {.argCount = 6, .invoker = __putString};
    methodMap_["setTaskStatus"] = MethodMetadata {.argCount = 3, .invoker = __setTaskStatus};
  }
  
private:
  static jsi::Value __getConstants(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* /*args*/, size_t /*count*/) {
    static_assert(
      bridging::getParameterCount(&T::getConstants) == 1,
      "Expected getConstants(...) to have 1 parameters");
    return bridging::callFromJs<jsi::Object>(rt, &T::getConstants,  static_cast<NativeRNFBTurboStorageCxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule));
  }

  static jsi::Value __deleteObject(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::deleteObject) == 3,
      "Expected deleteObject(...) to have 3 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::deleteObject,  static_cast<NativeRNFBTurboStorageCxxSpec*>(&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 __getDownloadURL(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::getDownloadURL) == 3,
      "Expected getDownloadURL(...) to have 3 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::getDownloadURL,  static_cast<NativeRNFBTurboStorageCxxSpec*>(&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 __getMetadata(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::getMetadata) == 3,
      "Expected getMetadata(...) to have 3 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::getMetadata,  static_cast<NativeRNFBTurboStorageCxxSpec*>(&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 __updateMetadata(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::updateMetadata) == 4,
      "Expected updateMetadata(...) to have 4 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::updateMetadata,  static_cast<NativeRNFBTurboStorageCxxSpec*>(&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 || args[2].isNull() || args[2].isUndefined() ? std::nullopt : std::make_optional(args[2].asObject(rt)));
  }

  static jsi::Value __list(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::list) == 4,
      "Expected list(...) to have 4 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::list,  static_cast<NativeRNFBTurboStorageCxxSpec*>(&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 __listAll(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::listAll) == 3,
      "Expected listAll(...) to have 3 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::listAll,  static_cast<NativeRNFBTurboStorageCxxSpec*>(&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 __setMaxDownloadRetryTime(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::setMaxDownloadRetryTime) == 3,
      "Expected setMaxDownloadRetryTime(...) to have 3 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::setMaxDownloadRetryTime,  static_cast<NativeRNFBTurboStorageCxxSpec*>(&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].asNumber());
  }

  static jsi::Value __setMaxOperationRetryTime(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::setMaxOperationRetryTime) == 3,
      "Expected setMaxOperationRetryTime(...) to have 3 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::setMaxOperationRetryTime,  static_cast<NativeRNFBTurboStorageCxxSpec*>(&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].asNumber());
  }

  static jsi::Value __setMaxUploadRetryTime(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::setMaxUploadRetryTime) == 3,
      "Expected setMaxUploadRetryTime(...) to have 3 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::setMaxUploadRetryTime,  static_cast<NativeRNFBTurboStorageCxxSpec*>(&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].asNumber());
  }

  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<NativeRNFBTurboStorageCxxSpec*>(&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));return jsi::Value::undefined();
  }

  static jsi::Value __writeToFile(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::writeToFile) == 5,
      "Expected writeToFile(...) to have 5 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::writeToFile,  static_cast<NativeRNFBTurboStorageCxxSpec*>(&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());
  }

  static jsi::Value __putFile(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::putFile) == 6,
      "Expected putFile(...) to have 6 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::putFile,  static_cast<NativeRNFBTurboStorageCxxSpec*>(&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].isNull() || args[3].isUndefined() ? std::nullopt : std::make_optional(args[3].asObject(rt)),
      count <= 4 ? throw jsi::JSError(rt, "Expected argument in position 4 to be passed") : args[4].asNumber());
  }

  static jsi::Value __putString(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::putString) == 7,
      "Expected putString(...) to have 7 parameters");
    return bridging::callFromJs<jsi::Value>(rt, &T::putString,  static_cast<NativeRNFBTurboStorageCxxSpec*>(&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 || args[4].isNull() || args[4].isUndefined() ? std::nullopt : std::make_optional(args[4].asObject(rt)),
      count <= 5 ? throw jsi::JSError(rt, "Expected argument in position 5 to be passed") : args[5].asNumber());
  }

  static jsi::Value __setTaskStatus(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
    static_assert(
      bridging::getParameterCount(&T::setTaskStatus) == 4,
      "Expected setTaskStatus(...) to have 4 parameters");
    return bridging::callFromJs<bool>(rt, &T::setTaskStatus,  static_cast<NativeRNFBTurboStorageCxxSpec*>(&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].asNumber(),
      count <= 2 ? throw jsi::JSError(rt, "Expected argument in position 2 to be passed") : args[2].asNumber());
  }
};

} // namespace facebook::react
