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

#pragma once

// Forward declarations of C++ defined types
// Forward declaration of `HybridNitroOrientationSpec` to properly resolve imports.
namespace margelo::nitro::orientation { class HybridNitroOrientationSpec; }

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

// Include C++ defined types
#include "HybridNitroOrientationSpec.hpp"
#include <NitroModules/Result.hpp>
#include <exception>
#include <functional>
#include <memory>
#include <string>

/**
 * 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::orientation::bridge::swift {

  // pragma MARK: std::function<void(const std::string& /* orientation */)>
  /**
   * Specialized version of `std::function<void(const std::string&)>`.
   */
  using Func_void_std__string = std::function<void(const std::string& /* orientation */)>;
  /**
   * Wrapper class for a `std::function<void(const std::string& / * orientation * /)>`, this can be used from Swift.
   */
  class Func_void_std__string_Wrapper final {
  public:
    explicit Func_void_std__string_Wrapper(std::function<void(const std::string& /* orientation */)>&& func): _function(std::make_unique<std::function<void(const std::string& /* orientation */)>>(std::move(func))) {}
    inline void call(std::string orientation) const noexcept {
      _function->operator()(orientation);
    }
  private:
    std::unique_ptr<std::function<void(const std::string& /* orientation */)>> _function;
  } SWIFT_NONCOPYABLE;
  Func_void_std__string create_Func_void_std__string(void* _Nonnull swiftClosureWrapper) noexcept;
  inline Func_void_std__string_Wrapper wrap_Func_void_std__string(Func_void_std__string value) noexcept {
    return Func_void_std__string_Wrapper(std::move(value));
  }
  
  // pragma MARK: std::shared_ptr<HybridNitroOrientationSpec>
  /**
   * Specialized version of `std::shared_ptr<HybridNitroOrientationSpec>`.
   */
  using std__shared_ptr_HybridNitroOrientationSpec_ = std::shared_ptr<HybridNitroOrientationSpec>;
  std::shared_ptr<HybridNitroOrientationSpec> create_std__shared_ptr_HybridNitroOrientationSpec_(void* _Nonnull swiftUnsafePointer) noexcept;
  void* _Nonnull get_std__shared_ptr_HybridNitroOrientationSpec_(std__shared_ptr_HybridNitroOrientationSpec_ cppType) noexcept;
  
  // pragma MARK: std::weak_ptr<HybridNitroOrientationSpec>
  using std__weak_ptr_HybridNitroOrientationSpec_ = std::weak_ptr<HybridNitroOrientationSpec>;
  inline std__weak_ptr_HybridNitroOrientationSpec_ weakify_std__shared_ptr_HybridNitroOrientationSpec_(const std::shared_ptr<HybridNitroOrientationSpec>& strong) noexcept { return strong; }
  
  // pragma MARK: Result<std::string>
  using Result_std__string_ = Result<std::string>;
  inline Result_std__string_ create_Result_std__string_(const std::string& value) noexcept {
    return Result<std::string>::withValue(value);
  }
  inline Result_std__string_ create_Result_std__string_(const std::exception_ptr& error) noexcept {
    return Result<std::string>::withError(error);
  }
  
  // pragma MARK: Result<void>
  using Result_void_ = Result<void>;
  inline Result_void_ create_Result_void_() noexcept {
    return Result<void>::withValue();
  }
  inline Result_void_ create_Result_void_(const std::exception_ptr& error) noexcept {
    return Result<void>::withError(error);
  }
  
  // pragma MARK: Result<bool>
  using Result_bool_ = Result<bool>;
  inline Result_bool_ create_Result_bool_(bool value) noexcept {
    return Result<bool>::withValue(std::move(value));
  }
  inline Result_bool_ create_Result_bool_(const std::exception_ptr& error) noexcept {
    return Result<bool>::withError(error);
  }

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