///
/// NitroQmblurview-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 `HybridBlurViewGroupSpec` to properly resolve imports.
namespace margelo::nitro::qmblurview { class HybridBlurViewGroupSpec; }
// Forward declaration of `HybridBlurViewSpec` to properly resolve imports.
namespace margelo::nitro::qmblurview { class HybridBlurViewSpec; }

// Forward declarations of Swift defined types
// Forward declaration of `HybridBlurViewGroupSpec_cxx` to properly resolve imports.
namespace NitroQmblurview { class HybridBlurViewGroupSpec_cxx; }
// Forward declaration of `HybridBlurViewSpec_cxx` to properly resolve imports.
namespace NitroQmblurview { class HybridBlurViewSpec_cxx; }

// Include C++ defined types
#include "HybridBlurViewGroupSpec.hpp"
#include "HybridBlurViewSpec.hpp"
#include <memory>
#include <optional>
#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::qmblurview::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;
  }
  
  // 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;
  }
  
  // pragma MARK: std::shared_ptr<HybridBlurViewSpec>
  /**
   * Specialized version of `std::shared_ptr<HybridBlurViewSpec>`.
   */
  using std__shared_ptr_HybridBlurViewSpec_ = std::shared_ptr<HybridBlurViewSpec>;
  std::shared_ptr<HybridBlurViewSpec> create_std__shared_ptr_HybridBlurViewSpec_(void* NON_NULL swiftUnsafePointer) noexcept;
  void* NON_NULL get_std__shared_ptr_HybridBlurViewSpec_(std__shared_ptr_HybridBlurViewSpec_ cppType);
  
  // pragma MARK: std::weak_ptr<HybridBlurViewSpec>
  using std__weak_ptr_HybridBlurViewSpec_ = std::weak_ptr<HybridBlurViewSpec>;
  inline std__weak_ptr_HybridBlurViewSpec_ weakify_std__shared_ptr_HybridBlurViewSpec_(const std::shared_ptr<HybridBlurViewSpec>& strong) noexcept { return strong; }
  
  // pragma MARK: std::shared_ptr<HybridBlurViewGroupSpec>
  /**
   * Specialized version of `std::shared_ptr<HybridBlurViewGroupSpec>`.
   */
  using std__shared_ptr_HybridBlurViewGroupSpec_ = std::shared_ptr<HybridBlurViewGroupSpec>;
  std::shared_ptr<HybridBlurViewGroupSpec> create_std__shared_ptr_HybridBlurViewGroupSpec_(void* NON_NULL swiftUnsafePointer) noexcept;
  void* NON_NULL get_std__shared_ptr_HybridBlurViewGroupSpec_(std__shared_ptr_HybridBlurViewGroupSpec_ cppType);
  
  // pragma MARK: std::weak_ptr<HybridBlurViewGroupSpec>
  using std__weak_ptr_HybridBlurViewGroupSpec_ = std::weak_ptr<HybridBlurViewGroupSpec>;
  inline std__weak_ptr_HybridBlurViewGroupSpec_ weakify_std__shared_ptr_HybridBlurViewGroupSpec_(const std::shared_ptr<HybridBlurViewGroupSpec>& strong) noexcept { return strong; }

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