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

#pragma once

// Forward declarations of C++ defined types
// Forward declaration of `AccessControl` to properly resolve imports.
namespace margelo::nitro::sensitiveinfo { enum class AccessControl; }
// Forward declaration of `AuthenticationPrompt` to properly resolve imports.
namespace margelo::nitro::sensitiveinfo { struct AuthenticationPrompt; }
// Forward declaration of `BiometryStatus` to properly resolve imports.
namespace margelo::nitro::sensitiveinfo { enum class BiometryStatus; }
// Forward declaration of `HybridSensitiveInfoSpec` to properly resolve imports.
namespace margelo::nitro::sensitiveinfo { class HybridSensitiveInfoSpec; }
// Forward declaration of `MutationResult` to properly resolve imports.
namespace margelo::nitro::sensitiveinfo { struct MutationResult; }
// Forward declaration of `RotateKeysRequest` to properly resolve imports.
namespace margelo::nitro::sensitiveinfo { struct RotateKeysRequest; }
// Forward declaration of `RotationResult` to properly resolve imports.
namespace margelo::nitro::sensitiveinfo { struct RotationResult; }
// Forward declaration of `SecurityAvailability` to properly resolve imports.
namespace margelo::nitro::sensitiveinfo { struct SecurityAvailability; }
// Forward declaration of `SecurityLevel` to properly resolve imports.
namespace margelo::nitro::sensitiveinfo { enum class SecurityLevel; }
// Forward declaration of `SensitiveInfoEnumerateRequest` to properly resolve imports.
namespace margelo::nitro::sensitiveinfo { struct SensitiveInfoEnumerateRequest; }
// Forward declaration of `SensitiveInfoItem` to properly resolve imports.
namespace margelo::nitro::sensitiveinfo { struct SensitiveInfoItem; }
// Forward declaration of `SensitiveInfoOptions` to properly resolve imports.
namespace margelo::nitro::sensitiveinfo { struct SensitiveInfoOptions; }
// Forward declaration of `StorageBackend` to properly resolve imports.
namespace margelo::nitro::sensitiveinfo { enum class StorageBackend; }
// Forward declaration of `StorageMetadata` to properly resolve imports.
namespace margelo::nitro::sensitiveinfo { struct StorageMetadata; }

// Forward declarations of Swift defined types
// Forward declaration of `HybridSensitiveInfoSpec_cxx` to properly resolve imports.
namespace SensitiveInfo { class HybridSensitiveInfoSpec_cxx; }

// Include C++ defined types
#include "AccessControl.hpp"
#include "AuthenticationPrompt.hpp"
#include "BiometryStatus.hpp"
#include "HybridSensitiveInfoSpec.hpp"
#include "MutationResult.hpp"
#include "RotateKeysRequest.hpp"
#include "RotationResult.hpp"
#include "SecurityAvailability.hpp"
#include "SecurityLevel.hpp"
#include "SensitiveInfoEnumerateRequest.hpp"
#include "SensitiveInfoItem.hpp"
#include "SensitiveInfoOptions.hpp"
#include "StorageBackend.hpp"
#include "StorageMetadata.hpp"
#include <NitroModules/Null.hpp>
#include <NitroModules/Promise.hpp>
#include <NitroModules/PromiseHolder.hpp>
#include <NitroModules/Result.hpp>
#include <exception>
#include <functional>
#include <memory>
#include <optional>
#include <string>
#include <variant>
#include <vector>

/**
 * Contains specialized versions of C++ templated types so they can be accessed from Swift,
 * as well as helper functions to interact with those C++ types from Swift.
 */
namespace margelo::nitro::sensitiveinfo::bridge::swift {

  // pragma MARK: std::optional<double>
  /**
   * Specialized version of `std::optional<double>`.
   */
  using std__optional_double_ = std::optional<double>;
  inline std::optional<double> create_std__optional_double_(const double& value) noexcept {
    return std::optional<double>(value);
  }
  inline bool has_value_std__optional_double_(const std::optional<double>& optional) noexcept {
    return optional.has_value();
  }
  inline double get_std__optional_double_(const std::optional<double>& optional) noexcept {
    return optional.value();
  }
  
  // pragma MARK: std::optional<std::string>
  /**
   * Specialized version of `std::optional<std::string>`.
   */
  using std__optional_std__string_ = std::optional<std::string>;
  inline std::optional<std::string> create_std__optional_std__string_(const std::string& value) noexcept {
    return std::optional<std::string>(value);
  }
  inline bool has_value_std__optional_std__string_(const std::optional<std::string>& optional) noexcept {
    return optional.has_value();
  }
  inline std::string get_std__optional_std__string_(const std::optional<std::string>& optional) noexcept {
    return optional.value();
  }
  
  // pragma MARK: std::shared_ptr<Promise<MutationResult>>
  /**
   * Specialized version of `std::shared_ptr<Promise<MutationResult>>`.
   */
  using std__shared_ptr_Promise_MutationResult__ = std::shared_ptr<Promise<MutationResult>>;
  inline std::shared_ptr<Promise<MutationResult>> create_std__shared_ptr_Promise_MutationResult__() noexcept {
    return Promise<MutationResult>::create();
  }
  inline PromiseHolder<MutationResult> wrap_std__shared_ptr_Promise_MutationResult__(std::shared_ptr<Promise<MutationResult>> promise) noexcept {
    return PromiseHolder<MutationResult>(std::move(promise));
  }
  
  // pragma MARK: std::function<void(const MutationResult& /* result */)>
  /**
   * Specialized version of `std::function<void(const MutationResult&)>`.
   */
  using Func_void_MutationResult = std::function<void(const MutationResult& /* result */)>;
  /**
   * Wrapper class for a `std::function<void(const MutationResult& / * result * /)>`, this can be used from Swift.
   */
  class Func_void_MutationResult_Wrapper final {
  public:
    explicit Func_void_MutationResult_Wrapper(std::function<void(const MutationResult& /* result */)>&& func): _function(std::make_unique<std::function<void(const MutationResult& /* result */)>>(std::move(func))) {}
    inline void call(MutationResult result) const noexcept {
      _function->operator()(result);
    }
  private:
    std::unique_ptr<std::function<void(const MutationResult& /* result */)>> _function;
  } SWIFT_NONCOPYABLE;
  Func_void_MutationResult create_Func_void_MutationResult(void* NON_NULL swiftClosureWrapper) noexcept;
  inline Func_void_MutationResult_Wrapper wrap_Func_void_MutationResult(Func_void_MutationResult value) noexcept {
    return Func_void_MutationResult_Wrapper(std::move(value));
  }
  
  // pragma MARK: std::function<void(const std::exception_ptr& /* error */)>
  /**
   * Specialized version of `std::function<void(const std::exception_ptr&)>`.
   */
  using Func_void_std__exception_ptr = std::function<void(const std::exception_ptr& /* error */)>;
  /**
   * Wrapper class for a `std::function<void(const std::exception_ptr& / * error * /)>`, this can be used from Swift.
   */
  class Func_void_std__exception_ptr_Wrapper final {
  public:
    explicit Func_void_std__exception_ptr_Wrapper(std::function<void(const std::exception_ptr& /* error */)>&& func): _function(std::make_unique<std::function<void(const std::exception_ptr& /* error */)>>(std::move(func))) {}
    inline void call(std::exception_ptr error) const noexcept {
      _function->operator()(error);
    }
  private:
    std::unique_ptr<std::function<void(const std::exception_ptr& /* error */)>> _function;
  } SWIFT_NONCOPYABLE;
  Func_void_std__exception_ptr create_Func_void_std__exception_ptr(void* NON_NULL swiftClosureWrapper) noexcept;
  inline Func_void_std__exception_ptr_Wrapper wrap_Func_void_std__exception_ptr(Func_void_std__exception_ptr value) noexcept {
    return Func_void_std__exception_ptr_Wrapper(std::move(value));
  }
  
  // pragma MARK: std::optional<bool>
  /**
   * Specialized version of `std::optional<bool>`.
   */
  using std__optional_bool_ = std::optional<bool>;
  inline std::optional<bool> create_std__optional_bool_(const bool& value) noexcept {
    return std::optional<bool>(value);
  }
  inline bool has_value_std__optional_bool_(const std::optional<bool>& optional) noexcept {
    return optional.has_value();
  }
  inline bool get_std__optional_bool_(const std::optional<bool>& optional) noexcept {
    return optional.value();
  }
  
  // pragma MARK: std::optional<AccessControl>
  /**
   * Specialized version of `std::optional<AccessControl>`.
   */
  using std__optional_AccessControl_ = std::optional<AccessControl>;
  inline std::optional<AccessControl> create_std__optional_AccessControl_(const AccessControl& value) noexcept {
    return std::optional<AccessControl>(value);
  }
  inline bool has_value_std__optional_AccessControl_(const std::optional<AccessControl>& optional) noexcept {
    return optional.has_value();
  }
  inline AccessControl get_std__optional_AccessControl_(const std::optional<AccessControl>& optional) noexcept {
    return optional.value();
  }
  
  // pragma MARK: std::optional<AuthenticationPrompt>
  /**
   * Specialized version of `std::optional<AuthenticationPrompt>`.
   */
  using std__optional_AuthenticationPrompt_ = std::optional<AuthenticationPrompt>;
  inline std::optional<AuthenticationPrompt> create_std__optional_AuthenticationPrompt_(const AuthenticationPrompt& value) noexcept {
    return std::optional<AuthenticationPrompt>(value);
  }
  inline bool has_value_std__optional_AuthenticationPrompt_(const std::optional<AuthenticationPrompt>& optional) noexcept {
    return optional.has_value();
  }
  inline AuthenticationPrompt get_std__optional_AuthenticationPrompt_(const std::optional<AuthenticationPrompt>& optional) noexcept {
    return optional.value();
  }
  
  // pragma MARK: std::variant<nitro::NullType, SensitiveInfoItem>
  /**
   * Wrapper struct for `std::variant<nitro::NullType, SensitiveInfoItem>`.
   * std::variant cannot be used in Swift because of a Swift bug.
   * Not even specializing it works. So we create a wrapper struct.
   */
  struct std__variant_nitro__NullType__SensitiveInfoItem_ final {
    std::variant<nitro::NullType, SensitiveInfoItem> variant;
    std__variant_nitro__NullType__SensitiveInfoItem_(std::variant<nitro::NullType, SensitiveInfoItem> variant): variant(variant) { }
    operator std::variant<nitro::NullType, SensitiveInfoItem>() const noexcept {
      return variant;
    }
    inline size_t index() const noexcept {
      return variant.index();
    }
    inline nitro::NullType get_0() const noexcept {
      return std::get<0>(variant);
    }
    inline SensitiveInfoItem get_1() const noexcept {
      return std::get<1>(variant);
    }
  };
  inline std__variant_nitro__NullType__SensitiveInfoItem_ create_std__variant_nitro__NullType__SensitiveInfoItem_(nitro::NullType value) noexcept {
    return std__variant_nitro__NullType__SensitiveInfoItem_(value);
  }
  inline std__variant_nitro__NullType__SensitiveInfoItem_ create_std__variant_nitro__NullType__SensitiveInfoItem_(const SensitiveInfoItem& value) noexcept {
    return std__variant_nitro__NullType__SensitiveInfoItem_(value);
  }
  
  // pragma MARK: std::shared_ptr<Promise<std::variant<nitro::NullType, SensitiveInfoItem>>>
  /**
   * Specialized version of `std::shared_ptr<Promise<std::variant<nitro::NullType, SensitiveInfoItem>>>`.
   */
  using std__shared_ptr_Promise_std__variant_nitro__NullType__SensitiveInfoItem___ = std::shared_ptr<Promise<std::variant<nitro::NullType, SensitiveInfoItem>>>;
  inline std::shared_ptr<Promise<std::variant<nitro::NullType, SensitiveInfoItem>>> create_std__shared_ptr_Promise_std__variant_nitro__NullType__SensitiveInfoItem___() noexcept {
    return Promise<std::variant<nitro::NullType, SensitiveInfoItem>>::create();
  }
  inline PromiseHolder<std::variant<nitro::NullType, SensitiveInfoItem>> wrap_std__shared_ptr_Promise_std__variant_nitro__NullType__SensitiveInfoItem___(std::shared_ptr<Promise<std::variant<nitro::NullType, SensitiveInfoItem>>> promise) noexcept {
    return PromiseHolder<std::variant<nitro::NullType, SensitiveInfoItem>>(std::move(promise));
  }
  
  // pragma MARK: std::function<void(const std::variant<nitro::NullType, SensitiveInfoItem>& /* result */)>
  /**
   * Specialized version of `std::function<void(const std::variant<nitro::NullType, SensitiveInfoItem>&)>`.
   */
  using Func_void_std__variant_nitro__NullType__SensitiveInfoItem_ = std::function<void(const std::variant<nitro::NullType, SensitiveInfoItem>& /* result */)>;
  /**
   * Wrapper class for a `std::function<void(const std::variant<nitro::NullType, SensitiveInfoItem>& / * result * /)>`, this can be used from Swift.
   */
  class Func_void_std__variant_nitro__NullType__SensitiveInfoItem__Wrapper final {
  public:
    explicit Func_void_std__variant_nitro__NullType__SensitiveInfoItem__Wrapper(std::function<void(const std::variant<nitro::NullType, SensitiveInfoItem>& /* result */)>&& func): _function(std::make_unique<std::function<void(const std::variant<nitro::NullType, SensitiveInfoItem>& /* result */)>>(std::move(func))) {}
    inline void call(std::variant<nitro::NullType, SensitiveInfoItem> result) const noexcept {
      _function->operator()(result);
    }
  private:
    std::unique_ptr<std::function<void(const std::variant<nitro::NullType, SensitiveInfoItem>& /* result */)>> _function;
  } SWIFT_NONCOPYABLE;
  Func_void_std__variant_nitro__NullType__SensitiveInfoItem_ create_Func_void_std__variant_nitro__NullType__SensitiveInfoItem_(void* NON_NULL swiftClosureWrapper) noexcept;
  inline Func_void_std__variant_nitro__NullType__SensitiveInfoItem__Wrapper wrap_Func_void_std__variant_nitro__NullType__SensitiveInfoItem_(Func_void_std__variant_nitro__NullType__SensitiveInfoItem_ value) noexcept {
    return Func_void_std__variant_nitro__NullType__SensitiveInfoItem__Wrapper(std::move(value));
  }
  
  // pragma MARK: std::shared_ptr<Promise<bool>>
  /**
   * Specialized version of `std::shared_ptr<Promise<bool>>`.
   */
  using std__shared_ptr_Promise_bool__ = std::shared_ptr<Promise<bool>>;
  inline std::shared_ptr<Promise<bool>> create_std__shared_ptr_Promise_bool__() noexcept {
    return Promise<bool>::create();
  }
  inline PromiseHolder<bool> wrap_std__shared_ptr_Promise_bool__(std::shared_ptr<Promise<bool>> promise) noexcept {
    return PromiseHolder<bool>(std::move(promise));
  }
  
  // pragma MARK: std::function<void(bool /* result */)>
  /**
   * Specialized version of `std::function<void(bool)>`.
   */
  using Func_void_bool = std::function<void(bool /* result */)>;
  /**
   * Wrapper class for a `std::function<void(bool / * result * /)>`, this can be used from Swift.
   */
  class Func_void_bool_Wrapper final {
  public:
    explicit Func_void_bool_Wrapper(std::function<void(bool /* result */)>&& func): _function(std::make_unique<std::function<void(bool /* result */)>>(std::move(func))) {}
    inline void call(bool result) const noexcept {
      _function->operator()(result);
    }
  private:
    std::unique_ptr<std::function<void(bool /* result */)>> _function;
  } SWIFT_NONCOPYABLE;
  Func_void_bool create_Func_void_bool(void* NON_NULL swiftClosureWrapper) noexcept;
  inline Func_void_bool_Wrapper wrap_Func_void_bool(Func_void_bool value) noexcept {
    return Func_void_bool_Wrapper(std::move(value));
  }
  
  // pragma MARK: std::vector<SensitiveInfoItem>
  /**
   * Specialized version of `std::vector<SensitiveInfoItem>`.
   */
  using std__vector_SensitiveInfoItem_ = std::vector<SensitiveInfoItem>;
  inline std::vector<SensitiveInfoItem> create_std__vector_SensitiveInfoItem_(size_t size) noexcept {
    std::vector<SensitiveInfoItem> vector;
    vector.reserve(size);
    return vector;
  }
  
  // pragma MARK: std::shared_ptr<Promise<std::vector<SensitiveInfoItem>>>
  /**
   * Specialized version of `std::shared_ptr<Promise<std::vector<SensitiveInfoItem>>>`.
   */
  using std__shared_ptr_Promise_std__vector_SensitiveInfoItem___ = std::shared_ptr<Promise<std::vector<SensitiveInfoItem>>>;
  inline std::shared_ptr<Promise<std::vector<SensitiveInfoItem>>> create_std__shared_ptr_Promise_std__vector_SensitiveInfoItem___() noexcept {
    return Promise<std::vector<SensitiveInfoItem>>::create();
  }
  inline PromiseHolder<std::vector<SensitiveInfoItem>> wrap_std__shared_ptr_Promise_std__vector_SensitiveInfoItem___(std::shared_ptr<Promise<std::vector<SensitiveInfoItem>>> promise) noexcept {
    return PromiseHolder<std::vector<SensitiveInfoItem>>(std::move(promise));
  }
  
  // pragma MARK: std::function<void(const std::vector<SensitiveInfoItem>& /* result */)>
  /**
   * Specialized version of `std::function<void(const std::vector<SensitiveInfoItem>&)>`.
   */
  using Func_void_std__vector_SensitiveInfoItem_ = std::function<void(const std::vector<SensitiveInfoItem>& /* result */)>;
  /**
   * Wrapper class for a `std::function<void(const std::vector<SensitiveInfoItem>& / * result * /)>`, this can be used from Swift.
   */
  class Func_void_std__vector_SensitiveInfoItem__Wrapper final {
  public:
    explicit Func_void_std__vector_SensitiveInfoItem__Wrapper(std::function<void(const std::vector<SensitiveInfoItem>& /* result */)>&& func): _function(std::make_unique<std::function<void(const std::vector<SensitiveInfoItem>& /* result */)>>(std::move(func))) {}
    inline void call(std::vector<SensitiveInfoItem> result) const noexcept {
      _function->operator()(result);
    }
  private:
    std::unique_ptr<std::function<void(const std::vector<SensitiveInfoItem>& /* result */)>> _function;
  } SWIFT_NONCOPYABLE;
  Func_void_std__vector_SensitiveInfoItem_ create_Func_void_std__vector_SensitiveInfoItem_(void* NON_NULL swiftClosureWrapper) noexcept;
  inline Func_void_std__vector_SensitiveInfoItem__Wrapper wrap_Func_void_std__vector_SensitiveInfoItem_(Func_void_std__vector_SensitiveInfoItem_ value) noexcept {
    return Func_void_std__vector_SensitiveInfoItem__Wrapper(std::move(value));
  }
  
  // pragma MARK: std::optional<SensitiveInfoEnumerateRequest>
  /**
   * Specialized version of `std::optional<SensitiveInfoEnumerateRequest>`.
   */
  using std__optional_SensitiveInfoEnumerateRequest_ = std::optional<SensitiveInfoEnumerateRequest>;
  inline std::optional<SensitiveInfoEnumerateRequest> create_std__optional_SensitiveInfoEnumerateRequest_(const SensitiveInfoEnumerateRequest& value) noexcept {
    return std::optional<SensitiveInfoEnumerateRequest>(value);
  }
  inline bool has_value_std__optional_SensitiveInfoEnumerateRequest_(const std::optional<SensitiveInfoEnumerateRequest>& optional) noexcept {
    return optional.has_value();
  }
  inline SensitiveInfoEnumerateRequest get_std__optional_SensitiveInfoEnumerateRequest_(const std::optional<SensitiveInfoEnumerateRequest>& optional) noexcept {
    return optional.value();
  }
  
  // pragma MARK: std::shared_ptr<Promise<void>>
  /**
   * Specialized version of `std::shared_ptr<Promise<void>>`.
   */
  using std__shared_ptr_Promise_void__ = std::shared_ptr<Promise<void>>;
  inline std::shared_ptr<Promise<void>> create_std__shared_ptr_Promise_void__() noexcept {
    return Promise<void>::create();
  }
  inline PromiseHolder<void> wrap_std__shared_ptr_Promise_void__(std::shared_ptr<Promise<void>> promise) noexcept {
    return PromiseHolder<void>(std::move(promise));
  }
  
  // pragma MARK: std::function<void()>
  /**
   * Specialized version of `std::function<void()>`.
   */
  using Func_void = std::function<void()>;
  /**
   * Wrapper class for a `std::function<void()>`, this can be used from Swift.
   */
  class Func_void_Wrapper final {
  public:
    explicit Func_void_Wrapper(std::function<void()>&& func): _function(std::make_unique<std::function<void()>>(std::move(func))) {}
    inline void call() const noexcept {
      _function->operator()();
    }
  private:
    std::unique_ptr<std::function<void()>> _function;
  } SWIFT_NONCOPYABLE;
  Func_void create_Func_void(void* NON_NULL swiftClosureWrapper) noexcept;
  inline Func_void_Wrapper wrap_Func_void(Func_void value) noexcept {
    return Func_void_Wrapper(std::move(value));
  }
  
  // pragma MARK: std::optional<SensitiveInfoOptions>
  /**
   * Specialized version of `std::optional<SensitiveInfoOptions>`.
   */
  using std__optional_SensitiveInfoOptions_ = std::optional<SensitiveInfoOptions>;
  inline std::optional<SensitiveInfoOptions> create_std__optional_SensitiveInfoOptions_(const SensitiveInfoOptions& value) noexcept {
    return std::optional<SensitiveInfoOptions>(value);
  }
  inline bool has_value_std__optional_SensitiveInfoOptions_(const std::optional<SensitiveInfoOptions>& optional) noexcept {
    return optional.has_value();
  }
  inline SensitiveInfoOptions get_std__optional_SensitiveInfoOptions_(const std::optional<SensitiveInfoOptions>& optional) noexcept {
    return optional.value();
  }
  
  // pragma MARK: std::shared_ptr<Promise<SecurityAvailability>>
  /**
   * Specialized version of `std::shared_ptr<Promise<SecurityAvailability>>`.
   */
  using std__shared_ptr_Promise_SecurityAvailability__ = std::shared_ptr<Promise<SecurityAvailability>>;
  inline std::shared_ptr<Promise<SecurityAvailability>> create_std__shared_ptr_Promise_SecurityAvailability__() noexcept {
    return Promise<SecurityAvailability>::create();
  }
  inline PromiseHolder<SecurityAvailability> wrap_std__shared_ptr_Promise_SecurityAvailability__(std::shared_ptr<Promise<SecurityAvailability>> promise) noexcept {
    return PromiseHolder<SecurityAvailability>(std::move(promise));
  }
  
  // pragma MARK: std::function<void(const SecurityAvailability& /* result */)>
  /**
   * Specialized version of `std::function<void(const SecurityAvailability&)>`.
   */
  using Func_void_SecurityAvailability = std::function<void(const SecurityAvailability& /* result */)>;
  /**
   * Wrapper class for a `std::function<void(const SecurityAvailability& / * result * /)>`, this can be used from Swift.
   */
  class Func_void_SecurityAvailability_Wrapper final {
  public:
    explicit Func_void_SecurityAvailability_Wrapper(std::function<void(const SecurityAvailability& /* result */)>&& func): _function(std::make_unique<std::function<void(const SecurityAvailability& /* result */)>>(std::move(func))) {}
    inline void call(SecurityAvailability result) const noexcept {
      _function->operator()(result);
    }
  private:
    std::unique_ptr<std::function<void(const SecurityAvailability& /* result */)>> _function;
  } SWIFT_NONCOPYABLE;
  Func_void_SecurityAvailability create_Func_void_SecurityAvailability(void* NON_NULL swiftClosureWrapper) noexcept;
  inline Func_void_SecurityAvailability_Wrapper wrap_Func_void_SecurityAvailability(Func_void_SecurityAvailability value) noexcept {
    return Func_void_SecurityAvailability_Wrapper(std::move(value));
  }
  
  // pragma MARK: std::shared_ptr<Promise<RotationResult>>
  /**
   * Specialized version of `std::shared_ptr<Promise<RotationResult>>`.
   */
  using std__shared_ptr_Promise_RotationResult__ = std::shared_ptr<Promise<RotationResult>>;
  inline std::shared_ptr<Promise<RotationResult>> create_std__shared_ptr_Promise_RotationResult__() noexcept {
    return Promise<RotationResult>::create();
  }
  inline PromiseHolder<RotationResult> wrap_std__shared_ptr_Promise_RotationResult__(std::shared_ptr<Promise<RotationResult>> promise) noexcept {
    return PromiseHolder<RotationResult>(std::move(promise));
  }
  
  // pragma MARK: std::function<void(const RotationResult& /* result */)>
  /**
   * Specialized version of `std::function<void(const RotationResult&)>`.
   */
  using Func_void_RotationResult = std::function<void(const RotationResult& /* result */)>;
  /**
   * Wrapper class for a `std::function<void(const RotationResult& / * result * /)>`, this can be used from Swift.
   */
  class Func_void_RotationResult_Wrapper final {
  public:
    explicit Func_void_RotationResult_Wrapper(std::function<void(const RotationResult& /* result */)>&& func): _function(std::make_unique<std::function<void(const RotationResult& /* result */)>>(std::move(func))) {}
    inline void call(RotationResult result) const noexcept {
      _function->operator()(result);
    }
  private:
    std::unique_ptr<std::function<void(const RotationResult& /* result */)>> _function;
  } SWIFT_NONCOPYABLE;
  Func_void_RotationResult create_Func_void_RotationResult(void* NON_NULL swiftClosureWrapper) noexcept;
  inline Func_void_RotationResult_Wrapper wrap_Func_void_RotationResult(Func_void_RotationResult value) noexcept {
    return Func_void_RotationResult_Wrapper(std::move(value));
  }
  
  // pragma MARK: std::optional<RotateKeysRequest>
  /**
   * Specialized version of `std::optional<RotateKeysRequest>`.
   */
  using std__optional_RotateKeysRequest_ = std::optional<RotateKeysRequest>;
  inline std::optional<RotateKeysRequest> create_std__optional_RotateKeysRequest_(const RotateKeysRequest& value) noexcept {
    return std::optional<RotateKeysRequest>(value);
  }
  inline bool has_value_std__optional_RotateKeysRequest_(const std::optional<RotateKeysRequest>& optional) noexcept {
    return optional.has_value();
  }
  inline RotateKeysRequest get_std__optional_RotateKeysRequest_(const std::optional<RotateKeysRequest>& optional) noexcept {
    return optional.value();
  }
  
  // pragma MARK: std::shared_ptr<Promise<double>>
  /**
   * Specialized version of `std::shared_ptr<Promise<double>>`.
   */
  using std__shared_ptr_Promise_double__ = std::shared_ptr<Promise<double>>;
  inline std::shared_ptr<Promise<double>> create_std__shared_ptr_Promise_double__() noexcept {
    return Promise<double>::create();
  }
  inline PromiseHolder<double> wrap_std__shared_ptr_Promise_double__(std::shared_ptr<Promise<double>> promise) noexcept {
    return PromiseHolder<double>(std::move(promise));
  }
  
  // pragma MARK: std::function<void(double /* result */)>
  /**
   * Specialized version of `std::function<void(double)>`.
   */
  using Func_void_double = std::function<void(double /* result */)>;
  /**
   * Wrapper class for a `std::function<void(double / * result * /)>`, this can be used from Swift.
   */
  class Func_void_double_Wrapper final {
  public:
    explicit Func_void_double_Wrapper(std::function<void(double /* result */)>&& func): _function(std::make_unique<std::function<void(double /* result */)>>(std::move(func))) {}
    inline void call(double result) const noexcept {
      _function->operator()(result);
    }
  private:
    std::unique_ptr<std::function<void(double /* result */)>> _function;
  } SWIFT_NONCOPYABLE;
  Func_void_double create_Func_void_double(void* NON_NULL swiftClosureWrapper) noexcept;
  inline Func_void_double_Wrapper wrap_Func_void_double(Func_void_double value) noexcept {
    return Func_void_double_Wrapper(std::move(value));
  }
  
  // pragma MARK: std::shared_ptr<HybridSensitiveInfoSpec>
  /**
   * Specialized version of `std::shared_ptr<HybridSensitiveInfoSpec>`.
   */
  using std__shared_ptr_HybridSensitiveInfoSpec_ = std::shared_ptr<HybridSensitiveInfoSpec>;
  std::shared_ptr<HybridSensitiveInfoSpec> create_std__shared_ptr_HybridSensitiveInfoSpec_(void* NON_NULL swiftUnsafePointer) noexcept;
  void* NON_NULL get_std__shared_ptr_HybridSensitiveInfoSpec_(std__shared_ptr_HybridSensitiveInfoSpec_ cppType);
  
  // pragma MARK: std::weak_ptr<HybridSensitiveInfoSpec>
  using std__weak_ptr_HybridSensitiveInfoSpec_ = std::weak_ptr<HybridSensitiveInfoSpec>;
  inline std__weak_ptr_HybridSensitiveInfoSpec_ weakify_std__shared_ptr_HybridSensitiveInfoSpec_(const std::shared_ptr<HybridSensitiveInfoSpec>& strong) noexcept { return strong; }
  
  // pragma MARK: Result<std::shared_ptr<Promise<MutationResult>>>
  using Result_std__shared_ptr_Promise_MutationResult___ = Result<std::shared_ptr<Promise<MutationResult>>>;
  inline Result_std__shared_ptr_Promise_MutationResult___ create_Result_std__shared_ptr_Promise_MutationResult___(const std::shared_ptr<Promise<MutationResult>>& value) noexcept {
    return Result<std::shared_ptr<Promise<MutationResult>>>::withValue(value);
  }
  inline Result_std__shared_ptr_Promise_MutationResult___ create_Result_std__shared_ptr_Promise_MutationResult___(const std::exception_ptr& error) noexcept {
    return Result<std::shared_ptr<Promise<MutationResult>>>::withError(error);
  }
  
  // pragma MARK: Result<std::shared_ptr<Promise<std::variant<nitro::NullType, SensitiveInfoItem>>>>
  using Result_std__shared_ptr_Promise_std__variant_nitro__NullType__SensitiveInfoItem____ = Result<std::shared_ptr<Promise<std::variant<nitro::NullType, SensitiveInfoItem>>>>;
  inline Result_std__shared_ptr_Promise_std__variant_nitro__NullType__SensitiveInfoItem____ create_Result_std__shared_ptr_Promise_std__variant_nitro__NullType__SensitiveInfoItem____(const std::shared_ptr<Promise<std::variant<nitro::NullType, SensitiveInfoItem>>>& value) noexcept {
    return Result<std::shared_ptr<Promise<std::variant<nitro::NullType, SensitiveInfoItem>>>>::withValue(value);
  }
  inline Result_std__shared_ptr_Promise_std__variant_nitro__NullType__SensitiveInfoItem____ create_Result_std__shared_ptr_Promise_std__variant_nitro__NullType__SensitiveInfoItem____(const std::exception_ptr& error) noexcept {
    return Result<std::shared_ptr<Promise<std::variant<nitro::NullType, SensitiveInfoItem>>>>::withError(error);
  }
  
  // pragma MARK: Result<std::shared_ptr<Promise<bool>>>
  using Result_std__shared_ptr_Promise_bool___ = Result<std::shared_ptr<Promise<bool>>>;
  inline Result_std__shared_ptr_Promise_bool___ create_Result_std__shared_ptr_Promise_bool___(const std::shared_ptr<Promise<bool>>& value) noexcept {
    return Result<std::shared_ptr<Promise<bool>>>::withValue(value);
  }
  inline Result_std__shared_ptr_Promise_bool___ create_Result_std__shared_ptr_Promise_bool___(const std::exception_ptr& error) noexcept {
    return Result<std::shared_ptr<Promise<bool>>>::withError(error);
  }
  
  // pragma MARK: Result<std::shared_ptr<Promise<std::vector<SensitiveInfoItem>>>>
  using Result_std__shared_ptr_Promise_std__vector_SensitiveInfoItem____ = Result<std::shared_ptr<Promise<std::vector<SensitiveInfoItem>>>>;
  inline Result_std__shared_ptr_Promise_std__vector_SensitiveInfoItem____ create_Result_std__shared_ptr_Promise_std__vector_SensitiveInfoItem____(const std::shared_ptr<Promise<std::vector<SensitiveInfoItem>>>& value) noexcept {
    return Result<std::shared_ptr<Promise<std::vector<SensitiveInfoItem>>>>::withValue(value);
  }
  inline Result_std__shared_ptr_Promise_std__vector_SensitiveInfoItem____ create_Result_std__shared_ptr_Promise_std__vector_SensitiveInfoItem____(const std::exception_ptr& error) noexcept {
    return Result<std::shared_ptr<Promise<std::vector<SensitiveInfoItem>>>>::withError(error);
  }
  
  // pragma MARK: Result<std::shared_ptr<Promise<void>>>
  using Result_std__shared_ptr_Promise_void___ = Result<std::shared_ptr<Promise<void>>>;
  inline Result_std__shared_ptr_Promise_void___ create_Result_std__shared_ptr_Promise_void___(const std::shared_ptr<Promise<void>>& value) noexcept {
    return Result<std::shared_ptr<Promise<void>>>::withValue(value);
  }
  inline Result_std__shared_ptr_Promise_void___ create_Result_std__shared_ptr_Promise_void___(const std::exception_ptr& error) noexcept {
    return Result<std::shared_ptr<Promise<void>>>::withError(error);
  }
  
  // pragma MARK: Result<std::shared_ptr<Promise<SecurityAvailability>>>
  using Result_std__shared_ptr_Promise_SecurityAvailability___ = Result<std::shared_ptr<Promise<SecurityAvailability>>>;
  inline Result_std__shared_ptr_Promise_SecurityAvailability___ create_Result_std__shared_ptr_Promise_SecurityAvailability___(const std::shared_ptr<Promise<SecurityAvailability>>& value) noexcept {
    return Result<std::shared_ptr<Promise<SecurityAvailability>>>::withValue(value);
  }
  inline Result_std__shared_ptr_Promise_SecurityAvailability___ create_Result_std__shared_ptr_Promise_SecurityAvailability___(const std::exception_ptr& error) noexcept {
    return Result<std::shared_ptr<Promise<SecurityAvailability>>>::withError(error);
  }
  
  // pragma MARK: Result<std::shared_ptr<Promise<RotationResult>>>
  using Result_std__shared_ptr_Promise_RotationResult___ = Result<std::shared_ptr<Promise<RotationResult>>>;
  inline Result_std__shared_ptr_Promise_RotationResult___ create_Result_std__shared_ptr_Promise_RotationResult___(const std::shared_ptr<Promise<RotationResult>>& value) noexcept {
    return Result<std::shared_ptr<Promise<RotationResult>>>::withValue(value);
  }
  inline Result_std__shared_ptr_Promise_RotationResult___ create_Result_std__shared_ptr_Promise_RotationResult___(const std::exception_ptr& error) noexcept {
    return Result<std::shared_ptr<Promise<RotationResult>>>::withError(error);
  }
  
  // pragma MARK: Result<std::shared_ptr<Promise<double>>>
  using Result_std__shared_ptr_Promise_double___ = Result<std::shared_ptr<Promise<double>>>;
  inline Result_std__shared_ptr_Promise_double___ create_Result_std__shared_ptr_Promise_double___(const std::shared_ptr<Promise<double>>& value) noexcept {
    return Result<std::shared_ptr<Promise<double>>>::withValue(value);
  }
  inline Result_std__shared_ptr_Promise_double___ create_Result_std__shared_ptr_Promise_double___(const std::exception_ptr& error) noexcept {
    return Result<std::shared_ptr<Promise<double>>>::withError(error);
  }

} // namespace margelo::nitro::sensitiveinfo::bridge::swift
