#ifndef TARGET_OS_SIMULATOR
#include <TargetConditionals.h>
#endif
#if TARGET_OS_SIMULATOR
// Generated by Apple Swift version 5.3 (swiftlang-1200.0.29.2 clang-1200.0.30.1)
#ifndef DATASTACK_SWIFT_H
#define DATASTACK_SWIFT_H
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgcc-compat"

#if !defined(__has_include)
# define __has_include(x) 0
#endif
#if !defined(__has_attribute)
# define __has_attribute(x) 0
#endif
#if !defined(__has_feature)
# define __has_feature(x) 0
#endif
#if !defined(__has_warning)
# define __has_warning(x) 0
#endif

#if __has_include(<swift/objc-prologue.h>)
# include <swift/objc-prologue.h>
#endif

#pragma clang diagnostic ignored "-Wauto-import"
#include <Foundation/Foundation.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>

#if !defined(SWIFT_TYPEDEFS)
# define SWIFT_TYPEDEFS 1
# if __has_include(<uchar.h>)
#  include <uchar.h>
# elif !defined(__cplusplus)
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
# endif
typedef float swift_float2  __attribute__((__ext_vector_type__(2)));
typedef float swift_float3  __attribute__((__ext_vector_type__(3)));
typedef float swift_float4  __attribute__((__ext_vector_type__(4)));
typedef double swift_double2  __attribute__((__ext_vector_type__(2)));
typedef double swift_double3  __attribute__((__ext_vector_type__(3)));
typedef double swift_double4  __attribute__((__ext_vector_type__(4)));
typedef int swift_int2  __attribute__((__ext_vector_type__(2)));
typedef int swift_int3  __attribute__((__ext_vector_type__(3)));
typedef int swift_int4  __attribute__((__ext_vector_type__(4)));
typedef unsigned int swift_uint2  __attribute__((__ext_vector_type__(2)));
typedef unsigned int swift_uint3  __attribute__((__ext_vector_type__(3)));
typedef unsigned int swift_uint4  __attribute__((__ext_vector_type__(4)));
#endif

#if !defined(SWIFT_PASTE)
# define SWIFT_PASTE_HELPER(x, y) x##y
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
# define SWIFT_METATYPE(X) Class
#endif
#if !defined(SWIFT_CLASS_PROPERTY)
# if __has_feature(objc_class_property)
#  define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__
# else
#  define SWIFT_CLASS_PROPERTY(...)
# endif
#endif

#if __has_attribute(objc_runtime_name)
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
#else
# define SWIFT_RUNTIME_NAME(X)
#endif
#if __has_attribute(swift_name)
# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
#else
# define SWIFT_COMPILE_NAME(X)
#endif
#if __has_attribute(objc_method_family)
# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X)))
#else
# define SWIFT_METHOD_FAMILY(X)
#endif
#if __has_attribute(noescape)
# define SWIFT_NOESCAPE __attribute__((noescape))
#else
# define SWIFT_NOESCAPE
#endif
#if __has_attribute(ns_consumed)
# define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed))
#else
# define SWIFT_RELEASES_ARGUMENT
#endif
#if __has_attribute(warn_unused_result)
# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
#else
# define SWIFT_WARN_UNUSED_RESULT
#endif
#if __has_attribute(noreturn)
# define SWIFT_NORETURN __attribute__((noreturn))
#else
# define SWIFT_NORETURN
#endif
#if !defined(SWIFT_CLASS_EXTRA)
# define SWIFT_CLASS_EXTRA
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
# define SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_ENUM_EXTRA)
# define SWIFT_ENUM_EXTRA
#endif
#if !defined(SWIFT_CLASS)
# if __has_attribute(objc_subclassing_restricted)
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# else
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif
#if !defined(SWIFT_RESILIENT_CLASS)
# if __has_attribute(objc_class_stub)
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub))
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME)
# else
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME)
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME)
# endif
#endif

#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif

#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif

#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if __has_attribute(objc_designated_initializer)
#  define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
#  define OBJC_DESIGNATED_INITIALIZER
# endif
#endif
#if !defined(SWIFT_ENUM_ATTR)
# if defined(__has_attribute) && __has_attribute(enum_extensibility)
#  define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility)))
# else
#  define SWIFT_ENUM_ATTR(_extensibility)
# endif
#endif
#if !defined(SWIFT_ENUM)
# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# if __has_feature(generalized_swift_name)
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# else
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility)
# endif
#endif
#if !defined(SWIFT_UNAVAILABLE)
# define SWIFT_UNAVAILABLE __attribute__((unavailable))
#endif
#if !defined(SWIFT_UNAVAILABLE_MSG)
# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg)))
#endif
#if !defined(SWIFT_AVAILABILITY)
# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__)))
#endif
#if !defined(SWIFT_WEAK_IMPORT)
# define SWIFT_WEAK_IMPORT __attribute__((weak_import))
#endif
#if !defined(SWIFT_DEPRECATED)
# define SWIFT_DEPRECATED __attribute__((deprecated))
#endif
#if !defined(SWIFT_DEPRECATED_MSG)
# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__)))
#endif
#if __has_feature(attribute_diagnose_if_objc)
# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning")))
#else
# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg)
#endif
#if !defined(IBSegueAction)
# define IBSegueAction
#endif
#if __has_feature(modules)
#if __has_warning("-Watimport-in-framework-header")
#pragma clang diagnostic ignored "-Watimport-in-framework-header"
#endif
@import Foundation;
@import ObjectiveC;
#endif

#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
#if __has_warning("-Wpragma-clang-attribute")
# pragma clang diagnostic ignored "-Wpragma-clang-attribute"
#endif
#pragma clang diagnostic ignored "-Wunknown-pragmas"
#pragma clang diagnostic ignored "-Wnullability"

#if __has_attribute(external_source_symbol)
# pragma push_macro("any")
# undef any
# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="DATAStack",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))
# pragma pop_macro("any")
#endif

@class NSManagedObjectContext;
@class NSPersistentStoreCoordinator;
enum DATAStackStoreType : NSInteger;
@class NSBundle;
@class NSManagedObjectModel;
@class NSError;
@class NSPersistentStoreRequest;

SWIFT_CLASS("_TtC9DATAStack9DATAStack")
@interface DATAStack : NSObject
/// The context for the main queue. Please do not use this to mutate data, use <code>performInNewBackgroundContext</code>
/// instead.
@property (nonatomic, strong) NSManagedObjectContext * _Nonnull mainContext;
/// The context for the main queue. Please do not use this to mutate data, use <code>performBackgroundTask</code>
/// instead.
@property (nonatomic, readonly, strong) NSManagedObjectContext * _Nonnull viewContext;
@property (nonatomic, readonly, strong) NSPersistentStoreCoordinator * _Nonnull persistentStoreCoordinator;
/// Initializes a DATAStack using the bundle name as the model name, so if your target is called ModernApp,
/// it will look for a ModernApp.xcdatamodeld.
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// Initializes a DATAStack using the provided model name.
/// \param modelName The name of your Core Data model (xcdatamodeld).
///
- (nonnull instancetype)initWithModelName:(NSString * _Nonnull)modelName OBJC_DESIGNATED_INITIALIZER;
/// Initializes a DATAStack using the provided model name.
/// \param modelName The name of your Core Data model (xcdatamodeld).
///
/// \param isExcludedFromBackup Flag to indicate if the data store should be excluded from backup. Default set to true.
///
- (nonnull instancetype)initWithModelName:(NSString * _Nonnull)modelName isExcludedFromBackup:(BOOL)isExcludedFromBackup OBJC_DESIGNATED_INITIALIZER;
/// Initializes a DATAStack using the provided model name, bundle and storeType.
/// \param modelName The name of your Core Data model (xcdatamodeld).
///
/// \param storeType The store type to be used, you have .InMemory and .SQLite, the first one is memory
/// based and doesn’t save to disk, while the second one creates a .sqlite file and stores things there.
///
- (nonnull instancetype)initWithModelName:(NSString * _Nonnull)modelName storeType:(enum DATAStackStoreType)storeType OBJC_DESIGNATED_INITIALIZER;
/// Initializes a DATAStack using the provided model name, bundle and storeType.
/// \param modelName The name of your Core Data model (xcdatamodeld).
///
/// \param bundle The bundle where your Core Data model is located, normally your Core Data model is in
/// the main bundle but when using unit tests sometimes your Core Data model could be located where your tests
/// are located.
///
/// \param storeType The store type to be used, you have .InMemory and .SQLite, the first one is memory
/// based and doesn’t save to disk, while the second one creates a .sqlite file and stores things there.
///
- (nonnull instancetype)initWithModelName:(NSString * _Nonnull)modelName bundle:(NSBundle * _Nonnull)bundle storeType:(enum DATAStackStoreType)storeType OBJC_DESIGNATED_INITIALIZER;
/// Initializes a DATAStack using the provided model name, bundle, storeType and store name.
/// \param modelName The name of your Core Data model (xcdatamodeld).
///
/// \param bundle The bundle where your Core Data model is located, normally your Core Data model is in
/// the main bundle but when using unit tests sometimes your Core Data model could be located where your tests
/// are located.
///
/// \param storeType The store type to be used, you have .InMemory and .SQLite, the first one is memory
/// based and doesn’t save to disk, while the second one creates a .sqlite file and stores things there.
///
/// \param storeName Normally your file would be named as your model name is named, so if your model
/// name is AwesomeApp then the .sqlite file will be named AwesomeApp.sqlite, this attribute allows your to
/// change that.
///
- (nonnull instancetype)initWithModelName:(NSString * _Nonnull)modelName bundle:(NSBundle * _Nonnull)bundle storeType:(enum DATAStackStoreType)storeType storeName:(NSString * _Nonnull)storeName OBJC_DESIGNATED_INITIALIZER;
/// Initializes a DATAStack using the provided model name, bundle, storeType and store name.
/// \param modelName The name of your Core Data model (xcdatamodeld).
///
/// \param bundle The bundle where your Core Data model is located, normally your Core Data model is in
/// the main bundle but when using unit tests sometimes your Core Data model could be located where your tests
/// are located.
///
/// \param storeType The store type to be used, you have .InMemory and .SQLite, the first one is memory
/// based and doesn’t save to disk, while the second one creates a .sqlite file and stores things there.
///
/// \param storeName Normally your file would be named as your model name is named, so if your model
/// name is AwesomeApp then the .sqlite file will be named AwesomeApp.sqlite, this attribute allows your to
/// change that.
///
/// \param containerURL The container URL for the sqlite file when a store type of SQLite is used.
///
- (nonnull instancetype)initWithModelName:(NSString * _Nonnull)modelName bundle:(NSBundle * _Nonnull)bundle storeType:(enum DATAStackStoreType)storeType storeName:(NSString * _Nonnull)storeName containerURL:(NSURL * _Nonnull)containerURL OBJC_DESIGNATED_INITIALIZER;
/// Initializes a DATAStack using the provided model name, bundle and storeType.
/// \param model The model that we’ll use to set up your DATAStack.
///
/// \param storeType The store type to be used, you have .InMemory and .SQLite, the first one is memory
/// based and doesn’t save to disk, while the second one creates a .sqlite file and stores things there.
///
- (nonnull instancetype)initWithModel:(NSManagedObjectModel * _Nonnull)model storeType:(enum DATAStackStoreType)storeType OBJC_DESIGNATED_INITIALIZER;
/// Returns a new main context that is detached from saving to disk.
- (NSManagedObjectContext * _Nonnull)newDisposableMainContext SWIFT_WARN_UNUSED_RESULT;
/// Returns a background context perfect for data mutability operations. Make sure to never use it on the main thread. Use <code>performBlock</code> or <code>performBlockAndWait</code> to use it.
/// Saving to this context doesn’t merge with the main thread. This context is specially useful to run operations that don’t block the main thread. To refresh your main thread objects for
/// example when using a NSFetchedResultsController use <code>try self.fetchedResultsController.performFetch()</code>.
- (NSManagedObjectContext * _Nonnull)newNonMergingBackgroundContext SWIFT_WARN_UNUSED_RESULT;
/// Returns a background context perfect for data mutability operations. Make sure to never use it on the main thread. Use <code>performBlock</code> or <code>performBlockAndWait</code> to use it.
- (NSManagedObjectContext * _Nonnull)newBackgroundContext SWIFT_WARN_UNUSED_RESULT;
/// Returns a background context perfect for data mutability operations.
/// \param operation The block that contains the created background context.
///
- (void)performInNewBackgroundContext:(void (^ _Nonnull)(NSManagedObjectContext * _Nonnull))operation;
/// Returns a background context perfect for data mutability operations.
/// \param operation The block that contains the created background context.
///
- (void)performBackgroundTaskWithOperation:(void (^ _Nonnull)(NSManagedObjectContext * _Nonnull))operation;
- (void)dropWithCompletion:(void (^ _Nullable)(NSError * _Nullable))completion;
/// Sends a request to all the persistent stores associated with the receiver.
/// \param request A fetch, save or delete request.
///
/// \param context The context against which request should be executed.
///
///
/// throws:
/// If an error occurs, upon return contains an NSError object that describes the problem.
///
/// returns:
/// An array containing managed objects, managed object IDs, or dictionaries as appropriate for a fetch request; an empty array if request is a save request, or nil if an error occurred.
- (id _Nullable)execute:(NSPersistentStoreRequest * _Nonnull)request with:(NSManagedObjectContext * _Nonnull)context error:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
- (void)mainContextDidSave:(NSNotification * _Nonnull)notification;
- (void)newDisposableMainContextWillSave:(NSNotification * _Nonnull)notification;
- (BOOL)backgroundContextDidSave:(NSNotification * _Nonnull)notification error:(NSError * _Nullable * _Nullable)error;
@end

typedef SWIFT_ENUM(NSInteger, DATAStackStoreType, closed) {
  DATAStackStoreTypeInMemory = 0,
  DATAStackStoreTypeSqLite = 1,
};




#if __has_attribute(external_source_symbol)
# pragma clang attribute pop
#endif
#pragma clang diagnostic pop
#endif

#else
// Generated by Apple Swift version 5.3 (swiftlang-1200.0.29.2 clang-1200.0.30.1)
#ifndef DATASTACK_SWIFT_H
#define DATASTACK_SWIFT_H
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wgcc-compat"

#if !defined(__has_include)
# define __has_include(x) 0
#endif
#if !defined(__has_attribute)
# define __has_attribute(x) 0
#endif
#if !defined(__has_feature)
# define __has_feature(x) 0
#endif
#if !defined(__has_warning)
# define __has_warning(x) 0
#endif

#if __has_include(<swift/objc-prologue.h>)
# include <swift/objc-prologue.h>
#endif

#pragma clang diagnostic ignored "-Wauto-import"
#include <Foundation/Foundation.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>

#if !defined(SWIFT_TYPEDEFS)
# define SWIFT_TYPEDEFS 1
# if __has_include(<uchar.h>)
#  include <uchar.h>
# elif !defined(__cplusplus)
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
# endif
typedef float swift_float2  __attribute__((__ext_vector_type__(2)));
typedef float swift_float3  __attribute__((__ext_vector_type__(3)));
typedef float swift_float4  __attribute__((__ext_vector_type__(4)));
typedef double swift_double2  __attribute__((__ext_vector_type__(2)));
typedef double swift_double3  __attribute__((__ext_vector_type__(3)));
typedef double swift_double4  __attribute__((__ext_vector_type__(4)));
typedef int swift_int2  __attribute__((__ext_vector_type__(2)));
typedef int swift_int3  __attribute__((__ext_vector_type__(3)));
typedef int swift_int4  __attribute__((__ext_vector_type__(4)));
typedef unsigned int swift_uint2  __attribute__((__ext_vector_type__(2)));
typedef unsigned int swift_uint3  __attribute__((__ext_vector_type__(3)));
typedef unsigned int swift_uint4  __attribute__((__ext_vector_type__(4)));
#endif

#if !defined(SWIFT_PASTE)
# define SWIFT_PASTE_HELPER(x, y) x##y
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
# define SWIFT_METATYPE(X) Class
#endif
#if !defined(SWIFT_CLASS_PROPERTY)
# if __has_feature(objc_class_property)
#  define SWIFT_CLASS_PROPERTY(...) __VA_ARGS__
# else
#  define SWIFT_CLASS_PROPERTY(...)
# endif
#endif

#if __has_attribute(objc_runtime_name)
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
#else
# define SWIFT_RUNTIME_NAME(X)
#endif
#if __has_attribute(swift_name)
# define SWIFT_COMPILE_NAME(X) __attribute__((swift_name(X)))
#else
# define SWIFT_COMPILE_NAME(X)
#endif
#if __has_attribute(objc_method_family)
# define SWIFT_METHOD_FAMILY(X) __attribute__((objc_method_family(X)))
#else
# define SWIFT_METHOD_FAMILY(X)
#endif
#if __has_attribute(noescape)
# define SWIFT_NOESCAPE __attribute__((noescape))
#else
# define SWIFT_NOESCAPE
#endif
#if __has_attribute(ns_consumed)
# define SWIFT_RELEASES_ARGUMENT __attribute__((ns_consumed))
#else
# define SWIFT_RELEASES_ARGUMENT
#endif
#if __has_attribute(warn_unused_result)
# define SWIFT_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
#else
# define SWIFT_WARN_UNUSED_RESULT
#endif
#if __has_attribute(noreturn)
# define SWIFT_NORETURN __attribute__((noreturn))
#else
# define SWIFT_NORETURN
#endif
#if !defined(SWIFT_CLASS_EXTRA)
# define SWIFT_CLASS_EXTRA
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
# define SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_ENUM_EXTRA)
# define SWIFT_ENUM_EXTRA
#endif
#if !defined(SWIFT_CLASS)
# if __has_attribute(objc_subclassing_restricted)
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# else
#  define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
#  define SWIFT_CLASS_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif
#if !defined(SWIFT_RESILIENT_CLASS)
# if __has_attribute(objc_class_stub)
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME) __attribute__((objc_class_stub))
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) __attribute__((objc_class_stub)) SWIFT_CLASS_NAMED(SWIFT_NAME)
# else
#  define SWIFT_RESILIENT_CLASS(SWIFT_NAME) SWIFT_CLASS(SWIFT_NAME)
#  define SWIFT_RESILIENT_CLASS_NAMED(SWIFT_NAME) SWIFT_CLASS_NAMED(SWIFT_NAME)
# endif
#endif

#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
# define SWIFT_PROTOCOL_NAMED(SWIFT_NAME) SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif

#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif

#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if __has_attribute(objc_designated_initializer)
#  define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
#  define OBJC_DESIGNATED_INITIALIZER
# endif
#endif
#if !defined(SWIFT_ENUM_ATTR)
# if defined(__has_attribute) && __has_attribute(enum_extensibility)
#  define SWIFT_ENUM_ATTR(_extensibility) __attribute__((enum_extensibility(_extensibility)))
# else
#  define SWIFT_ENUM_ATTR(_extensibility)
# endif
#endif
#if !defined(SWIFT_ENUM)
# define SWIFT_ENUM(_type, _name, _extensibility) enum _name : _type _name; enum SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# if __has_feature(generalized_swift_name)
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) enum _name : _type _name SWIFT_COMPILE_NAME(SWIFT_NAME); enum SWIFT_COMPILE_NAME(SWIFT_NAME) SWIFT_ENUM_ATTR(_extensibility) SWIFT_ENUM_EXTRA _name : _type
# else
#  define SWIFT_ENUM_NAMED(_type, _name, SWIFT_NAME, _extensibility) SWIFT_ENUM(_type, _name, _extensibility)
# endif
#endif
#if !defined(SWIFT_UNAVAILABLE)
# define SWIFT_UNAVAILABLE __attribute__((unavailable))
#endif
#if !defined(SWIFT_UNAVAILABLE_MSG)
# define SWIFT_UNAVAILABLE_MSG(msg) __attribute__((unavailable(msg)))
#endif
#if !defined(SWIFT_AVAILABILITY)
# define SWIFT_AVAILABILITY(plat, ...) __attribute__((availability(plat, __VA_ARGS__)))
#endif
#if !defined(SWIFT_WEAK_IMPORT)
# define SWIFT_WEAK_IMPORT __attribute__((weak_import))
#endif
#if !defined(SWIFT_DEPRECATED)
# define SWIFT_DEPRECATED __attribute__((deprecated))
#endif
#if !defined(SWIFT_DEPRECATED_MSG)
# define SWIFT_DEPRECATED_MSG(...) __attribute__((deprecated(__VA_ARGS__)))
#endif
#if __has_feature(attribute_diagnose_if_objc)
# define SWIFT_DEPRECATED_OBJC(Msg) __attribute__((diagnose_if(1, Msg, "warning")))
#else
# define SWIFT_DEPRECATED_OBJC(Msg) SWIFT_DEPRECATED_MSG(Msg)
#endif
#if !defined(IBSegueAction)
# define IBSegueAction
#endif
#if __has_feature(modules)
#if __has_warning("-Watimport-in-framework-header")
#pragma clang diagnostic ignored "-Watimport-in-framework-header"
#endif
@import Foundation;
@import ObjectiveC;
#endif

#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
#pragma clang diagnostic ignored "-Wduplicate-method-arg"
#if __has_warning("-Wpragma-clang-attribute")
# pragma clang diagnostic ignored "-Wpragma-clang-attribute"
#endif
#pragma clang diagnostic ignored "-Wunknown-pragmas"
#pragma clang diagnostic ignored "-Wnullability"

#if __has_attribute(external_source_symbol)
# pragma push_macro("any")
# undef any
# pragma clang attribute push(__attribute__((external_source_symbol(language="Swift", defined_in="DATAStack",generated_declaration))), apply_to=any(function,enum,objc_interface,objc_category,objc_protocol))
# pragma pop_macro("any")
#endif

@class NSManagedObjectContext;
@class NSPersistentStoreCoordinator;
enum DATAStackStoreType : NSInteger;
@class NSBundle;
@class NSManagedObjectModel;
@class NSError;
@class NSPersistentStoreRequest;

SWIFT_CLASS("_TtC9DATAStack9DATAStack")
@interface DATAStack : NSObject
/// The context for the main queue. Please do not use this to mutate data, use <code>performInNewBackgroundContext</code>
/// instead.
@property (nonatomic, strong) NSManagedObjectContext * _Nonnull mainContext;
/// The context for the main queue. Please do not use this to mutate data, use <code>performBackgroundTask</code>
/// instead.
@property (nonatomic, readonly, strong) NSManagedObjectContext * _Nonnull viewContext;
@property (nonatomic, readonly, strong) NSPersistentStoreCoordinator * _Nonnull persistentStoreCoordinator;
/// Initializes a DATAStack using the bundle name as the model name, so if your target is called ModernApp,
/// it will look for a ModernApp.xcdatamodeld.
- (nonnull instancetype)init OBJC_DESIGNATED_INITIALIZER;
/// Initializes a DATAStack using the provided model name.
/// \param modelName The name of your Core Data model (xcdatamodeld).
///
- (nonnull instancetype)initWithModelName:(NSString * _Nonnull)modelName OBJC_DESIGNATED_INITIALIZER;
/// Initializes a DATAStack using the provided model name.
/// \param modelName The name of your Core Data model (xcdatamodeld).
///
/// \param isExcludedFromBackup Flag to indicate if the data store should be excluded from backup. Default set to true.
///
- (nonnull instancetype)initWithModelName:(NSString * _Nonnull)modelName isExcludedFromBackup:(BOOL)isExcludedFromBackup OBJC_DESIGNATED_INITIALIZER;
/// Initializes a DATAStack using the provided model name, bundle and storeType.
/// \param modelName The name of your Core Data model (xcdatamodeld).
///
/// \param storeType The store type to be used, you have .InMemory and .SQLite, the first one is memory
/// based and doesn’t save to disk, while the second one creates a .sqlite file and stores things there.
///
- (nonnull instancetype)initWithModelName:(NSString * _Nonnull)modelName storeType:(enum DATAStackStoreType)storeType OBJC_DESIGNATED_INITIALIZER;
/// Initializes a DATAStack using the provided model name, bundle and storeType.
/// \param modelName The name of your Core Data model (xcdatamodeld).
///
/// \param bundle The bundle where your Core Data model is located, normally your Core Data model is in
/// the main bundle but when using unit tests sometimes your Core Data model could be located where your tests
/// are located.
///
/// \param storeType The store type to be used, you have .InMemory and .SQLite, the first one is memory
/// based and doesn’t save to disk, while the second one creates a .sqlite file and stores things there.
///
- (nonnull instancetype)initWithModelName:(NSString * _Nonnull)modelName bundle:(NSBundle * _Nonnull)bundle storeType:(enum DATAStackStoreType)storeType OBJC_DESIGNATED_INITIALIZER;
/// Initializes a DATAStack using the provided model name, bundle, storeType and store name.
/// \param modelName The name of your Core Data model (xcdatamodeld).
///
/// \param bundle The bundle where your Core Data model is located, normally your Core Data model is in
/// the main bundle but when using unit tests sometimes your Core Data model could be located where your tests
/// are located.
///
/// \param storeType The store type to be used, you have .InMemory and .SQLite, the first one is memory
/// based and doesn’t save to disk, while the second one creates a .sqlite file and stores things there.
///
/// \param storeName Normally your file would be named as your model name is named, so if your model
/// name is AwesomeApp then the .sqlite file will be named AwesomeApp.sqlite, this attribute allows your to
/// change that.
///
- (nonnull instancetype)initWithModelName:(NSString * _Nonnull)modelName bundle:(NSBundle * _Nonnull)bundle storeType:(enum DATAStackStoreType)storeType storeName:(NSString * _Nonnull)storeName OBJC_DESIGNATED_INITIALIZER;
/// Initializes a DATAStack using the provided model name, bundle, storeType and store name.
/// \param modelName The name of your Core Data model (xcdatamodeld).
///
/// \param bundle The bundle where your Core Data model is located, normally your Core Data model is in
/// the main bundle but when using unit tests sometimes your Core Data model could be located where your tests
/// are located.
///
/// \param storeType The store type to be used, you have .InMemory and .SQLite, the first one is memory
/// based and doesn’t save to disk, while the second one creates a .sqlite file and stores things there.
///
/// \param storeName Normally your file would be named as your model name is named, so if your model
/// name is AwesomeApp then the .sqlite file will be named AwesomeApp.sqlite, this attribute allows your to
/// change that.
///
/// \param containerURL The container URL for the sqlite file when a store type of SQLite is used.
///
- (nonnull instancetype)initWithModelName:(NSString * _Nonnull)modelName bundle:(NSBundle * _Nonnull)bundle storeType:(enum DATAStackStoreType)storeType storeName:(NSString * _Nonnull)storeName containerURL:(NSURL * _Nonnull)containerURL OBJC_DESIGNATED_INITIALIZER;
/// Initializes a DATAStack using the provided model name, bundle and storeType.
/// \param model The model that we’ll use to set up your DATAStack.
///
/// \param storeType The store type to be used, you have .InMemory and .SQLite, the first one is memory
/// based and doesn’t save to disk, while the second one creates a .sqlite file and stores things there.
///
- (nonnull instancetype)initWithModel:(NSManagedObjectModel * _Nonnull)model storeType:(enum DATAStackStoreType)storeType OBJC_DESIGNATED_INITIALIZER;
/// Returns a new main context that is detached from saving to disk.
- (NSManagedObjectContext * _Nonnull)newDisposableMainContext SWIFT_WARN_UNUSED_RESULT;
/// Returns a background context perfect for data mutability operations. Make sure to never use it on the main thread. Use <code>performBlock</code> or <code>performBlockAndWait</code> to use it.
/// Saving to this context doesn’t merge with the main thread. This context is specially useful to run operations that don’t block the main thread. To refresh your main thread objects for
/// example when using a NSFetchedResultsController use <code>try self.fetchedResultsController.performFetch()</code>.
- (NSManagedObjectContext * _Nonnull)newNonMergingBackgroundContext SWIFT_WARN_UNUSED_RESULT;
/// Returns a background context perfect for data mutability operations. Make sure to never use it on the main thread. Use <code>performBlock</code> or <code>performBlockAndWait</code> to use it.
- (NSManagedObjectContext * _Nonnull)newBackgroundContext SWIFT_WARN_UNUSED_RESULT;
/// Returns a background context perfect for data mutability operations.
/// \param operation The block that contains the created background context.
///
- (void)performInNewBackgroundContext:(void (^ _Nonnull)(NSManagedObjectContext * _Nonnull))operation;
/// Returns a background context perfect for data mutability operations.
/// \param operation The block that contains the created background context.
///
- (void)performBackgroundTaskWithOperation:(void (^ _Nonnull)(NSManagedObjectContext * _Nonnull))operation;
- (void)dropWithCompletion:(void (^ _Nullable)(NSError * _Nullable))completion;
/// Sends a request to all the persistent stores associated with the receiver.
/// \param request A fetch, save or delete request.
///
/// \param context The context against which request should be executed.
///
///
/// throws:
/// If an error occurs, upon return contains an NSError object that describes the problem.
///
/// returns:
/// An array containing managed objects, managed object IDs, or dictionaries as appropriate for a fetch request; an empty array if request is a save request, or nil if an error occurred.
- (id _Nullable)execute:(NSPersistentStoreRequest * _Nonnull)request with:(NSManagedObjectContext * _Nonnull)context error:(NSError * _Nullable * _Nullable)error SWIFT_WARN_UNUSED_RESULT;
- (void)mainContextDidSave:(NSNotification * _Nonnull)notification;
- (void)newDisposableMainContextWillSave:(NSNotification * _Nonnull)notification;
- (BOOL)backgroundContextDidSave:(NSNotification * _Nonnull)notification error:(NSError * _Nullable * _Nullable)error;
@end

typedef SWIFT_ENUM(NSInteger, DATAStackStoreType, closed) {
  DATAStackStoreTypeInMemory = 0,
  DATAStackStoreTypeSqLite = 1,
};




#if __has_attribute(external_source_symbol)
# pragma clang attribute pop
#endif
#pragma clang diagnostic pop
#endif

#endif
