///
/// DfuError.hpp
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
/// https://github.com/mrousavy/nitro
/// Copyright © Marc Rousavy @ Margelo
///

#pragma once

#if __has_include(<NitroModules/JSIConverter.hpp>)
#include <NitroModules/JSIConverter.hpp>
#else
#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
#endif
#if __has_include(<NitroModules/NitroDefines.hpp>)
#include <NitroModules/NitroDefines.hpp>
#else
#error NitroModules cannot be found! Are you sure you installed NitroModules properly?
#endif

namespace margelo::nitro::co::zyke::dfu {

  /**
   * An enum which can be represented as a JavaScript enum (DfuError).
   */
  enum class DfuError {
    REMOTELEGACYDFUINVALIDSTATE      SWIFT_NAME(remotelegacydfuinvalidstate) = 2,
    REMOTELEGACYDFUNOTSUPPORTED      SWIFT_NAME(remotelegacydfunotsupported) = 3,
    REMOTELEGACYDFUDATAEXCEEDSLIMIT      SWIFT_NAME(remotelegacydfudataexceedslimit) = 4,
    REMOTELEGACYDFUCRCERROR      SWIFT_NAME(remotelegacydfucrcerror) = 5,
    REMOTELEGACYDFUOPERATIONFAILED      SWIFT_NAME(remotelegacydfuoperationfailed) = 6,
    REMOTESECUREDFUOPCODENOTSUPPORTED      SWIFT_NAME(remotesecuredfuopcodenotsupported) = 12,
    REMOTESECUREDFUINVALIDPARAMETER      SWIFT_NAME(remotesecuredfuinvalidparameter) = 13,
    REMOTESECUREDFUINSUFFICIENTRESOURCES      SWIFT_NAME(remotesecuredfuinsufficientresources) = 14,
    REMOTESECUREDFUINVALIDOBJECT      SWIFT_NAME(remotesecuredfuinvalidobject) = 15,
    REMOTESECUREDFUSIGNATUREMISMATCH      SWIFT_NAME(remotesecuredfusignaturemismatch) = 16,
    REMOTESECUREDFUUNSUPPORTEDTYPE      SWIFT_NAME(remotesecuredfuunsupportedtype) = 17,
    REMOTESECUREDFUOPERATIONNOTPERMITTED      SWIFT_NAME(remotesecuredfuoperationnotpermitted) = 18,
    REMOTESECUREDFUOPERATIONFAILED      SWIFT_NAME(remotesecuredfuoperationfailed) = 20,
    REMOTESECUREDFUEXTENDEDERROR      SWIFT_NAME(remotesecuredfuextendederror) = 21,
    REMOTEEXTENDEDERRORWRONGCOMMANDFORMAT      SWIFT_NAME(remoteextendederrorwrongcommandformat) = 22,
    REMOTEEXTENDEDERRORUNKNOWNCOMMAND      SWIFT_NAME(remoteextendederrorunknowncommand) = 23,
    REMOTEEXTENDEDERRORINITCOMMANDINVALID      SWIFT_NAME(remoteextendederrorinitcommandinvalid) = 24,
    REMOTEEXTENDEDERRORFWVERSIONFAILURE      SWIFT_NAME(remoteextendederrorfwversionfailure) = 25,
    REMOTEEXTENDEDERRORHWVERSIONFAILURE      SWIFT_NAME(remoteextendederrorhwversionfailure) = 26,
    REMOTEEXTENDEDERRORSDVERSIONFAILURE      SWIFT_NAME(remoteextendederrorsdversionfailure) = 27,
    REMOTEEXTENDEDERRORSIGNATUREMISSING      SWIFT_NAME(remoteextendederrorsignaturemissing) = 28,
    REMOTEEXTENDEDERRORWRONGHASHTYPE      SWIFT_NAME(remoteextendederrorwronghashtype) = 29,
    REMOTEEXTENDEDERRORHASHFAILED      SWIFT_NAME(remoteextendederrorhashfailed) = 30,
    REMOTEEXTENDEDERRORWRONGSIGNATURETYPE      SWIFT_NAME(remoteextendederrorwrongsignaturetype) = 31,
    REMOTEEXTENDEDERRORVERIFICATIONFAILED      SWIFT_NAME(remoteextendederrorverificationfailed) = 32,
    REMOTEEXTENDEDERRORINSUFFICIENTSPACE      SWIFT_NAME(remoteextendederrorinsufficientspace) = 33,
    REMOTEBUTTONLESSDFUOPCODENOTSUPPORTED      SWIFT_NAME(remotebuttonlessdfuopcodenotsupported) = 92,
    REMOTEBUTTONLESSDFUOPERATIONFAILED      SWIFT_NAME(remotebuttonlessdfuoperationfailed) = 94,
    REMOTEBUTTONLESSDFUINVALIDADVERTISEMENTNAME      SWIFT_NAME(remotebuttonlessdfuinvalidadvertisementname) = 95,
    REMOTEBUTTONLESSDFUBUSY      SWIFT_NAME(remotebuttonlessdfubusy) = 96,
    REMOTEBUTTONLESSDFUNOTBONDED      SWIFT_NAME(remotebuttonlessdfunotbonded) = 97,
    REMOTEEXPERIMENTALBUTTONLESSDFUOPCODENOTSUPPORTED      SWIFT_NAME(remoteexperimentalbuttonlessdfuopcodenotsupported) = 9002,
    REMOTEEXPERIMENTALBUTTONLESSDFUOPERATIONFAILED      SWIFT_NAME(remoteexperimentalbuttonlessdfuoperationfailed) = 9004,
    FILENOTSPECIFIED      SWIFT_NAME(filenotspecified) = 101,
    FILEINVALID      SWIFT_NAME(fileinvalid) = 102,
    EXTENDEDINITPACKETREQUIRED      SWIFT_NAME(extendedinitpacketrequired) = 103,
    INITPACKETREQUIRED      SWIFT_NAME(initpacketrequired) = 104,
    FILESIZEINVALID      SWIFT_NAME(filesizeinvalid) = 105,
    FILETYPEUNSUPPORTED      SWIFT_NAME(filetypeunsupported) = 106,
    FILEIOERROR      SWIFT_NAME(fileioerror) = 107,
    FAILEDTOCONNECT      SWIFT_NAME(failedtoconnect) = 201,
    DEVICEDISCONNECTED      SWIFT_NAME(devicedisconnected) = 202,
    BLUETOOTHDISABLED      SWIFT_NAME(bluetoothdisabled) = 203,
    DEVICENOTBONDED      SWIFT_NAME(devicenotbonded) = 204,
    SERVICEDISCOVERYFAILED      SWIFT_NAME(servicediscoveryfailed) = 301,
    DEVICENOTSUPPORTED      SWIFT_NAME(devicenotsupported) = 302,
    READINGVERSIONFAILED      SWIFT_NAME(readingversionfailed) = 303,
    ENABLINGCONTROLPOINTFAILED      SWIFT_NAME(enablingcontrolpointfailed) = 304,
    WRITINGCHARACTERISTICFAILED      SWIFT_NAME(writingcharacteristicfailed) = 305,
    RECEIVINGNOTIFICATIONFAILED      SWIFT_NAME(receivingnotificationfailed) = 306,
    UNSUPPORTEDRESPONSE      SWIFT_NAME(unsupportedresponse) = 307,
    BYTESLOST      SWIFT_NAME(byteslost) = 308,
    CRCERROR      SWIFT_NAME(crcerror) = 309,
    INVALIDINTERNALSTATE      SWIFT_NAME(invalidinternalstate) = 500,
  } CLOSED_ENUM;

} // namespace margelo::nitro::co::zyke::dfu

namespace margelo::nitro {

  // C++ DfuError <> JS DfuError (enum)
  template <>
  struct JSIConverter<margelo::nitro::co::zyke::dfu::DfuError> final {
    static inline margelo::nitro::co::zyke::dfu::DfuError fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) {
      int enumValue = JSIConverter<int>::fromJSI(runtime, arg);
      return static_cast<margelo::nitro::co::zyke::dfu::DfuError>(enumValue);
    }
    static inline jsi::Value toJSI(jsi::Runtime& runtime, margelo::nitro::co::zyke::dfu::DfuError arg) {
      int enumValue = static_cast<int>(arg);
      return JSIConverter<int>::toJSI(runtime, enumValue);
    }
    static inline bool canConvert(jsi::Runtime&, const jsi::Value& value) {
      if (!value.isNumber()) {
        return false;
      }
      double number = value.getNumber();
      int integer = static_cast<int>(number);
      if (number != integer) {
        // The integer is not the same value as the double - we truncated floating points.
        // Enums are all integers, so the input floating point number is obviously invalid.
        return false;
      }
      switch (integer) {
        case 2 /* REMOTELEGACYDFUINVALIDSTATE */: return true;
        case 3 /* REMOTELEGACYDFUNOTSUPPORTED */: return true;
        case 4 /* REMOTELEGACYDFUDATAEXCEEDSLIMIT */: return true;
        case 5 /* REMOTELEGACYDFUCRCERROR */: return true;
        case 6 /* REMOTELEGACYDFUOPERATIONFAILED */: return true;
        case 12 /* REMOTESECUREDFUOPCODENOTSUPPORTED */: return true;
        case 13 /* REMOTESECUREDFUINVALIDPARAMETER */: return true;
        case 14 /* REMOTESECUREDFUINSUFFICIENTRESOURCES */: return true;
        case 15 /* REMOTESECUREDFUINVALIDOBJECT */: return true;
        case 16 /* REMOTESECUREDFUSIGNATUREMISMATCH */: return true;
        case 17 /* REMOTESECUREDFUUNSUPPORTEDTYPE */: return true;
        case 18 /* REMOTESECUREDFUOPERATIONNOTPERMITTED */: return true;
        case 20 /* REMOTESECUREDFUOPERATIONFAILED */: return true;
        case 21 /* REMOTESECUREDFUEXTENDEDERROR */: return true;
        case 22 /* REMOTEEXTENDEDERRORWRONGCOMMANDFORMAT */: return true;
        case 23 /* REMOTEEXTENDEDERRORUNKNOWNCOMMAND */: return true;
        case 24 /* REMOTEEXTENDEDERRORINITCOMMANDINVALID */: return true;
        case 25 /* REMOTEEXTENDEDERRORFWVERSIONFAILURE */: return true;
        case 26 /* REMOTEEXTENDEDERRORHWVERSIONFAILURE */: return true;
        case 27 /* REMOTEEXTENDEDERRORSDVERSIONFAILURE */: return true;
        case 28 /* REMOTEEXTENDEDERRORSIGNATUREMISSING */: return true;
        case 29 /* REMOTEEXTENDEDERRORWRONGHASHTYPE */: return true;
        case 30 /* REMOTEEXTENDEDERRORHASHFAILED */: return true;
        case 31 /* REMOTEEXTENDEDERRORWRONGSIGNATURETYPE */: return true;
        case 32 /* REMOTEEXTENDEDERRORVERIFICATIONFAILED */: return true;
        case 33 /* REMOTEEXTENDEDERRORINSUFFICIENTSPACE */: return true;
        case 92 /* REMOTEBUTTONLESSDFUOPCODENOTSUPPORTED */: return true;
        case 94 /* REMOTEBUTTONLESSDFUOPERATIONFAILED */: return true;
        case 95 /* REMOTEBUTTONLESSDFUINVALIDADVERTISEMENTNAME */: return true;
        case 96 /* REMOTEBUTTONLESSDFUBUSY */: return true;
        case 97 /* REMOTEBUTTONLESSDFUNOTBONDED */: return true;
        case 9002 /* REMOTEEXPERIMENTALBUTTONLESSDFUOPCODENOTSUPPORTED */: return true;
        case 9004 /* REMOTEEXPERIMENTALBUTTONLESSDFUOPERATIONFAILED */: return true;
        case 101 /* FILENOTSPECIFIED */: return true;
        case 102 /* FILEINVALID */: return true;
        case 103 /* EXTENDEDINITPACKETREQUIRED */: return true;
        case 104 /* INITPACKETREQUIRED */: return true;
        case 105 /* FILESIZEINVALID */: return true;
        case 106 /* FILETYPEUNSUPPORTED */: return true;
        case 107 /* FILEIOERROR */: return true;
        case 201 /* FAILEDTOCONNECT */: return true;
        case 202 /* DEVICEDISCONNECTED */: return true;
        case 203 /* BLUETOOTHDISABLED */: return true;
        case 204 /* DEVICENOTBONDED */: return true;
        case 301 /* SERVICEDISCOVERYFAILED */: return true;
        case 302 /* DEVICENOTSUPPORTED */: return true;
        case 303 /* READINGVERSIONFAILED */: return true;
        case 304 /* ENABLINGCONTROLPOINTFAILED */: return true;
        case 305 /* WRITINGCHARACTERISTICFAILED */: return true;
        case 306 /* RECEIVINGNOTIFICATIONFAILED */: return true;
        case 307 /* UNSUPPORTEDRESPONSE */: return true;
        case 308 /* BYTESLOST */: return true;
        case 309 /* CRCERROR */: return true;
        case 500 /* INVALIDINTERNALSTATE */: return true;
        default: return false;
      }
    }
  };

} // namespace margelo::nitro
