/**
 * 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: GenerateModuleObjCpp
 *
 * We create an umbrella header (and corresponding implementation) here since
 * Cxx compilation in BUCK has a limitation: source-code producing genrule()s
 * must have a single output. More files => more genrule()s => slower builds.
 */

#ifndef __cplusplus
#error This file must be compiled as Obj-C++. If you are importing it, you must change your file extension to .mm.
#endif

// Avoid multiple includes of RNFBStorageTurboModules symbols
#ifndef RNFBStorageTurboModules_H
#define RNFBStorageTurboModules_H

#import <Foundation/Foundation.h>
#import <RCTRequired/RCTRequired.h>
#import <RCTTypeSafety/RCTConvertHelpers.h>
#import <RCTTypeSafety/RCTTypedModuleConstants.h>
#import <React/RCTBridgeModule.h>
#import <React/RCTCxxConvert.h>
#import <React/RCTManagedPointer.h>
#import <ReactCommon/RCTTurboModule.h>
#import <optional>
#import <vector>


NS_ASSUME_NONNULL_BEGIN
namespace JS {
  namespace NativeRNFBTurboStorage {
    struct StorageListOptions {
      double maxResults() const;
      NSString *pageToken() const;

      StorageListOptions(NSDictionary *const v) : _v(v) {}
    private:
      NSDictionary *_v;
    };
  }
}

@interface RCTCxxConvert (NativeRNFBTurboStorage_StorageListOptions)
+ (RCTManagedPointer *)JS_NativeRNFBTurboStorage_StorageListOptions:(id)json;
@end
namespace JS {
  namespace NativeRNFBTurboStorage {
    struct Constants {

      struct Builder {
        // Backwards compat for RCTTypedModuleConstants
        using ResultT = Constants;

        struct Input {
          RCTRequired<double> maxDownloadRetryTime;
          RCTRequired<double> maxOperationRetryTime;
          RCTRequired<double> maxUploadRetryTime;
        };

        /** Initialize with a set of values */
        Builder(const Input i);
        /** Initialize with an existing Constants */
        Builder(Constants i);
        /** Builds the object. Generally used only by the infrastructure. */
        NSDictionary *buildUnsafeRawValue() const { return _factory(); };
      private:
        NSDictionary *(^_factory)(void);
      };

      static Constants fromUnsafeRawValue(NSDictionary *const v) { return {v}; }
      NSDictionary *unsafeRawValue() const { return _v; }
    private:
      Constants(NSDictionary *const v) : _v(v) {}
      NSDictionary *_v;
    };
  }
}
@protocol NativeRNFBTurboStorageSpec <RCTBridgeModule, RCTTurboModule>

- (void)deleteObject:(NSString *)appName
                 url:(NSString *)url
             resolve:(RCTPromiseResolveBlock)resolve
              reject:(RCTPromiseRejectBlock)reject;
- (void)getDownloadURL:(NSString *)appName
                   url:(NSString *)url
               resolve:(RCTPromiseResolveBlock)resolve
                reject:(RCTPromiseRejectBlock)reject;
- (void)getMetadata:(NSString *)appName
                url:(NSString *)url
            resolve:(RCTPromiseResolveBlock)resolve
             reject:(RCTPromiseRejectBlock)reject;
- (void)updateMetadata:(NSString *)appName
                   url:(NSString *)url
              metadata:(NSDictionary * _Nullable)metadata
               resolve:(RCTPromiseResolveBlock)resolve
                reject:(RCTPromiseRejectBlock)reject;
- (void)list:(NSString *)appName
         url:(NSString *)url
 listOptions:(JS::NativeRNFBTurboStorage::StorageListOptions &)listOptions
     resolve:(RCTPromiseResolveBlock)resolve
      reject:(RCTPromiseRejectBlock)reject;
- (void)listAll:(NSString *)appName
            url:(NSString *)url
        resolve:(RCTPromiseResolveBlock)resolve
         reject:(RCTPromiseRejectBlock)reject;
- (void)setMaxDownloadRetryTime:(NSString *)appName
                   milliseconds:(double)milliseconds
                        resolve:(RCTPromiseResolveBlock)resolve
                         reject:(RCTPromiseRejectBlock)reject;
- (void)setMaxOperationRetryTime:(NSString *)appName
                    milliseconds:(double)milliseconds
                         resolve:(RCTPromiseResolveBlock)resolve
                          reject:(RCTPromiseRejectBlock)reject;
- (void)setMaxUploadRetryTime:(NSString *)appName
                 milliseconds:(double)milliseconds
                      resolve:(RCTPromiseResolveBlock)resolve
                       reject:(RCTPromiseRejectBlock)reject;
- (void)useEmulator:(NSString *)appName
               host:(NSString *)host
               port:(double)port
          bucketUrl:(NSString *)bucketUrl;
- (void)writeToFile:(NSString *)appName
                url:(NSString *)url
      localFilePath:(NSString *)localFilePath
             taskId:(double)taskId
            resolve:(RCTPromiseResolveBlock)resolve
             reject:(RCTPromiseRejectBlock)reject;
- (void)putFile:(NSString *)appName
            url:(NSString *)url
  localFilePath:(NSString *)localFilePath
       metadata:(NSDictionary * _Nullable)metadata
         taskId:(double)taskId
        resolve:(RCTPromiseResolveBlock)resolve
         reject:(RCTPromiseRejectBlock)reject;
- (void)putString:(NSString *)appName
              url:(NSString *)url
           string:(NSString *)string
           format:(NSString *)format
         metadata:(NSDictionary * _Nullable)metadata
           taskId:(double)taskId
          resolve:(RCTPromiseResolveBlock)resolve
           reject:(RCTPromiseRejectBlock)reject;
- (NSNumber *)setTaskStatus:(NSString *)appName
                     taskId:(double)taskId
                     status:(double)status;
- (facebook::react::ModuleConstants<JS::NativeRNFBTurboStorage::Constants::Builder>)constantsToExport;
- (facebook::react::ModuleConstants<JS::NativeRNFBTurboStorage::Constants::Builder>)getConstants;

@end

@interface NativeRNFBTurboStorageSpecBase : NSObject {
@protected
facebook::react::EventEmitterCallback _eventEmitterCallback;
}
- (void)setEventEmitterCallback:(EventEmitterCallbackWrapper *)eventEmitterCallbackWrapper;


@end

namespace facebook::react {
  /**
   * ObjC++ class for module 'NativeRNFBTurboStorage'
   */
  class JSI_EXPORT NativeRNFBTurboStorageSpecJSI : public ObjCTurboModule {
  public:
    NativeRNFBTurboStorageSpecJSI(const ObjCTurboModule::InitParams &params);
  };
} // namespace facebook::react
inline double JS::NativeRNFBTurboStorage::StorageListOptions::maxResults() const
{
  id const p = _v[@"maxResults"];
  return RCTBridgingToDouble(p);
}
inline NSString *JS::NativeRNFBTurboStorage::StorageListOptions::pageToken() const
{
  id const p = _v[@"pageToken"];
  return RCTBridgingToOptionalString(p);
}
inline JS::NativeRNFBTurboStorage::Constants::Builder::Builder(const Input i) : _factory(^{
  NSMutableDictionary *d = [NSMutableDictionary new];
  auto maxDownloadRetryTime = i.maxDownloadRetryTime.get();
  d[@"maxDownloadRetryTime"] = @(maxDownloadRetryTime);
  auto maxOperationRetryTime = i.maxOperationRetryTime.get();
  d[@"maxOperationRetryTime"] = @(maxOperationRetryTime);
  auto maxUploadRetryTime = i.maxUploadRetryTime.get();
  d[@"maxUploadRetryTime"] = @(maxUploadRetryTime);
  return d;
}) {}
inline JS::NativeRNFBTurboStorage::Constants::Builder::Builder(Constants i) : _factory(^{
  return i.unsafeRawValue();
}) {}
NS_ASSUME_NONNULL_END
#endif // RNFBStorageTurboModules_H
