///
/// ReactNativeVideo-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 `BandwidthData` to properly resolve imports.
namespace margelo::nitro::video { struct BandwidthData; }
// Forward declaration of `BufferConfig` to properly resolve imports.
namespace margelo::nitro::video { struct BufferConfig; }
// Forward declaration of `HybridVideoPlayerEventEmitterSpec` to properly resolve imports.
namespace margelo::nitro::video { class HybridVideoPlayerEventEmitterSpec; }
// Forward declaration of `HybridVideoPlayerFactorySpec` to properly resolve imports.
namespace margelo::nitro::video { class HybridVideoPlayerFactorySpec; }
// Forward declaration of `HybridVideoPlayerSourceFactorySpec` to properly resolve imports.
namespace margelo::nitro::video { class HybridVideoPlayerSourceFactorySpec; }
// Forward declaration of `HybridVideoPlayerSourceSpec` to properly resolve imports.
namespace margelo::nitro::video { class HybridVideoPlayerSourceSpec; }
// Forward declaration of `HybridVideoPlayerSpec` to properly resolve imports.
namespace margelo::nitro::video { class HybridVideoPlayerSpec; }
// Forward declaration of `HybridVideoViewViewManagerFactorySpec` to properly resolve imports.
namespace margelo::nitro::video { class HybridVideoViewViewManagerFactorySpec; }
// Forward declaration of `HybridVideoViewViewManagerSpec` to properly resolve imports.
namespace margelo::nitro::video { class HybridVideoViewViewManagerSpec; }
// Forward declaration of `LivePlaybackParams` to properly resolve imports.
namespace margelo::nitro::video { struct LivePlaybackParams; }
// Forward declaration of `NativeDrmParams` to properly resolve imports.
namespace margelo::nitro::video { struct NativeDrmParams; }
// Forward declaration of `NativeExternalSubtitle` to properly resolve imports.
namespace margelo::nitro::video { struct NativeExternalSubtitle; }
// Forward declaration of `OnGetLicensePayload` to properly resolve imports.
namespace margelo::nitro::video { struct OnGetLicensePayload; }
// Forward declaration of `Resolution` to properly resolve imports.
namespace margelo::nitro::video { struct Resolution; }
// Forward declaration of `SourceType` to properly resolve imports.
namespace margelo::nitro::video { enum class SourceType; }
// Forward declaration of `SubtitleType` to properly resolve imports.
namespace margelo::nitro::video { enum class SubtitleType; }
// Forward declaration of `TextTrack` to properly resolve imports.
namespace margelo::nitro::video { struct TextTrack; }
// Forward declaration of `TimedMetadataObject` to properly resolve imports.
namespace margelo::nitro::video { struct TimedMetadataObject; }
// Forward declaration of `TimedMetadata` to properly resolve imports.
namespace margelo::nitro::video { struct TimedMetadata; }
// Forward declaration of `VideoInformation` to properly resolve imports.
namespace margelo::nitro::video { struct VideoInformation; }
// Forward declaration of `VideoOrientation` to properly resolve imports.
namespace margelo::nitro::video { enum class VideoOrientation; }
// Forward declaration of `VideoPlayerStatus` to properly resolve imports.
namespace margelo::nitro::video { enum class VideoPlayerStatus; }
// Forward declaration of `onLoadData` to properly resolve imports.
namespace margelo::nitro::video { struct onLoadData; }
// Forward declaration of `onLoadStartData` to properly resolve imports.
namespace margelo::nitro::video { struct onLoadStartData; }
// Forward declaration of `onPlaybackStateChangeData` to properly resolve imports.
namespace margelo::nitro::video { struct onPlaybackStateChangeData; }
// Forward declaration of `onProgressData` to properly resolve imports.
namespace margelo::nitro::video { struct onProgressData; }
// Forward declaration of `onVolumeChangeData` to properly resolve imports.
namespace margelo::nitro::video { struct onVolumeChangeData; }

// Forward declarations of Swift defined types
// Forward declaration of `HybridVideoPlayerEventEmitterSpec_cxx` to properly resolve imports.
namespace ReactNativeVideo { class HybridVideoPlayerEventEmitterSpec_cxx; }
// Forward declaration of `HybridVideoPlayerFactorySpec_cxx` to properly resolve imports.
namespace ReactNativeVideo { class HybridVideoPlayerFactorySpec_cxx; }
// Forward declaration of `HybridVideoPlayerSourceFactorySpec_cxx` to properly resolve imports.
namespace ReactNativeVideo { class HybridVideoPlayerSourceFactorySpec_cxx; }
// Forward declaration of `HybridVideoPlayerSourceSpec_cxx` to properly resolve imports.
namespace ReactNativeVideo { class HybridVideoPlayerSourceSpec_cxx; }
// Forward declaration of `HybridVideoPlayerSpec_cxx` to properly resolve imports.
namespace ReactNativeVideo { class HybridVideoPlayerSpec_cxx; }
// Forward declaration of `HybridVideoViewViewManagerFactorySpec_cxx` to properly resolve imports.
namespace ReactNativeVideo { class HybridVideoViewViewManagerFactorySpec_cxx; }
// Forward declaration of `HybridVideoViewViewManagerSpec_cxx` to properly resolve imports.
namespace ReactNativeVideo { class HybridVideoViewViewManagerSpec_cxx; }

// Include C++ defined types
#include "BandwidthData.hpp"
#include "BufferConfig.hpp"
#include "HybridVideoPlayerEventEmitterSpec.hpp"
#include "HybridVideoPlayerFactorySpec.hpp"
#include "HybridVideoPlayerSourceFactorySpec.hpp"
#include "HybridVideoPlayerSourceSpec.hpp"
#include "HybridVideoPlayerSpec.hpp"
#include "HybridVideoViewViewManagerFactorySpec.hpp"
#include "HybridVideoViewViewManagerSpec.hpp"
#include "LivePlaybackParams.hpp"
#include "NativeDrmParams.hpp"
#include "NativeExternalSubtitle.hpp"
#include "OnGetLicensePayload.hpp"
#include "Resolution.hpp"
#include "SourceType.hpp"
#include "SubtitleType.hpp"
#include "TextTrack.hpp"
#include "TimedMetadata.hpp"
#include "TimedMetadataObject.hpp"
#include "VideoInformation.hpp"
#include "VideoOrientation.hpp"
#include "VideoPlayerStatus.hpp"
#include "onLoadData.hpp"
#include "onLoadStartData.hpp"
#include "onPlaybackStateChangeData.hpp"
#include "onProgressData.hpp"
#include "onVolumeChangeData.hpp"
#include <NitroModules/Promise.hpp>
#include <NitroModules/PromiseHolder.hpp>
#include <NitroModules/Result.hpp>
#include <exception>
#include <functional>
#include <memory>
#include <optional>
#include <string>
#include <unordered_map>
#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::video::bridge::swift {

  // pragma MARK: std::shared_ptr<HybridVideoPlayerSourceSpec>
  /**
   * Specialized version of `std::shared_ptr<HybridVideoPlayerSourceSpec>`.
   */
  using std__shared_ptr_HybridVideoPlayerSourceSpec_ = std::shared_ptr<HybridVideoPlayerSourceSpec>;
  std::shared_ptr<HybridVideoPlayerSourceSpec> create_std__shared_ptr_HybridVideoPlayerSourceSpec_(void* _Nonnull swiftUnsafePointer);
  void* _Nonnull get_std__shared_ptr_HybridVideoPlayerSourceSpec_(std__shared_ptr_HybridVideoPlayerSourceSpec_ cppType);
  
  // pragma MARK: std::weak_ptr<HybridVideoPlayerSourceSpec>
  using std__weak_ptr_HybridVideoPlayerSourceSpec_ = std::weak_ptr<HybridVideoPlayerSourceSpec>;
  inline std__weak_ptr_HybridVideoPlayerSourceSpec_ weakify_std__shared_ptr_HybridVideoPlayerSourceSpec_(const std::shared_ptr<HybridVideoPlayerSourceSpec>& strong) { return strong; }
  
  // pragma MARK: std::shared_ptr<HybridVideoPlayerEventEmitterSpec>
  /**
   * Specialized version of `std::shared_ptr<HybridVideoPlayerEventEmitterSpec>`.
   */
  using std__shared_ptr_HybridVideoPlayerEventEmitterSpec_ = std::shared_ptr<HybridVideoPlayerEventEmitterSpec>;
  std::shared_ptr<HybridVideoPlayerEventEmitterSpec> create_std__shared_ptr_HybridVideoPlayerEventEmitterSpec_(void* _Nonnull swiftUnsafePointer);
  void* _Nonnull get_std__shared_ptr_HybridVideoPlayerEventEmitterSpec_(std__shared_ptr_HybridVideoPlayerEventEmitterSpec_ cppType);
  
  // pragma MARK: std::weak_ptr<HybridVideoPlayerEventEmitterSpec>
  using std__weak_ptr_HybridVideoPlayerEventEmitterSpec_ = std::weak_ptr<HybridVideoPlayerEventEmitterSpec>;
  inline std__weak_ptr_HybridVideoPlayerEventEmitterSpec_ weakify_std__shared_ptr_HybridVideoPlayerEventEmitterSpec_(const std::shared_ptr<HybridVideoPlayerEventEmitterSpec>& strong) { return strong; }
  
  // 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__() {
    return Promise<void>::create();
  }
  inline PromiseHolder<void> wrap_std__shared_ptr_Promise_void__(std::shared_ptr<Promise<void>> promise) {
    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 {
      _function->operator()();
    }
  private:
    std::unique_ptr<std::function<void()>> _function;
  } SWIFT_NONCOPYABLE;
  Func_void create_Func_void(void* _Nonnull swiftClosureWrapper);
  inline Func_void_Wrapper wrap_Func_void(Func_void value) {
    return Func_void_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 {
      _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* _Nonnull swiftClosureWrapper);
  inline Func_void_std__exception_ptr_Wrapper wrap_Func_void_std__exception_ptr(Func_void_std__exception_ptr value) {
    return Func_void_std__exception_ptr_Wrapper(std::move(value));
  }
  
  // pragma MARK: std::optional<std::shared_ptr<HybridVideoPlayerSourceSpec>>
  /**
   * Specialized version of `std::optional<std::shared_ptr<HybridVideoPlayerSourceSpec>>`.
   */
  using std__optional_std__shared_ptr_HybridVideoPlayerSourceSpec__ = std::optional<std::shared_ptr<HybridVideoPlayerSourceSpec>>;
  inline std::optional<std::shared_ptr<HybridVideoPlayerSourceSpec>> create_std__optional_std__shared_ptr_HybridVideoPlayerSourceSpec__(const std::shared_ptr<HybridVideoPlayerSourceSpec>& value) {
    return std::optional<std::shared_ptr<HybridVideoPlayerSourceSpec>>(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) {
    return std::optional<std::string>(value);
  }
  
  // pragma MARK: std::vector<TextTrack>
  /**
   * Specialized version of `std::vector<TextTrack>`.
   */
  using std__vector_TextTrack_ = std::vector<TextTrack>;
  inline std::vector<TextTrack> create_std__vector_TextTrack_(size_t size) {
    std::vector<TextTrack> vector;
    vector.reserve(size);
    return vector;
  }
  
  // pragma MARK: std::optional<TextTrack>
  /**
   * Specialized version of `std::optional<TextTrack>`.
   */
  using std__optional_TextTrack_ = std::optional<TextTrack>;
  inline std::optional<TextTrack> create_std__optional_TextTrack_(const TextTrack& value) {
    return std::optional<TextTrack>(value);
  }
  
  // pragma MARK: std::shared_ptr<HybridVideoPlayerSpec>
  /**
   * Specialized version of `std::shared_ptr<HybridVideoPlayerSpec>`.
   */
  using std__shared_ptr_HybridVideoPlayerSpec_ = std::shared_ptr<HybridVideoPlayerSpec>;
  std::shared_ptr<HybridVideoPlayerSpec> create_std__shared_ptr_HybridVideoPlayerSpec_(void* _Nonnull swiftUnsafePointer);
  void* _Nonnull get_std__shared_ptr_HybridVideoPlayerSpec_(std__shared_ptr_HybridVideoPlayerSpec_ cppType);
  
  // pragma MARK: std::weak_ptr<HybridVideoPlayerSpec>
  using std__weak_ptr_HybridVideoPlayerSpec_ = std::weak_ptr<HybridVideoPlayerSpec>;
  inline std__weak_ptr_HybridVideoPlayerSpec_ weakify_std__shared_ptr_HybridVideoPlayerSpec_(const std::shared_ptr<HybridVideoPlayerSpec>& strong) { return strong; }
  
  // 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) {
    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) {
    return Result<std::shared_ptr<Promise<void>>>::withError(error);
  }
  
  // pragma MARK: Result<std::vector<TextTrack>>
  using Result_std__vector_TextTrack__ = Result<std::vector<TextTrack>>;
  inline Result_std__vector_TextTrack__ create_Result_std__vector_TextTrack__(const std::vector<TextTrack>& value) {
    return Result<std::vector<TextTrack>>::withValue(value);
  }
  inline Result_std__vector_TextTrack__ create_Result_std__vector_TextTrack__(const std::exception_ptr& error) {
    return Result<std::vector<TextTrack>>::withError(error);
  }
  
  // pragma MARK: Result<void>
  using Result_void_ = Result<void>;
  inline Result_void_ create_Result_void_() {
    return Result<void>::withValue();
  }
  inline Result_void_ create_Result_void_(const std::exception_ptr& error) {
    return Result<void>::withError(error);
  }
  
  // pragma MARK: std::shared_ptr<HybridVideoPlayerFactorySpec>
  /**
   * Specialized version of `std::shared_ptr<HybridVideoPlayerFactorySpec>`.
   */
  using std__shared_ptr_HybridVideoPlayerFactorySpec_ = std::shared_ptr<HybridVideoPlayerFactorySpec>;
  std::shared_ptr<HybridVideoPlayerFactorySpec> create_std__shared_ptr_HybridVideoPlayerFactorySpec_(void* _Nonnull swiftUnsafePointer);
  void* _Nonnull get_std__shared_ptr_HybridVideoPlayerFactorySpec_(std__shared_ptr_HybridVideoPlayerFactorySpec_ cppType);
  
  // pragma MARK: std::weak_ptr<HybridVideoPlayerFactorySpec>
  using std__weak_ptr_HybridVideoPlayerFactorySpec_ = std::weak_ptr<HybridVideoPlayerFactorySpec>;
  inline std__weak_ptr_HybridVideoPlayerFactorySpec_ weakify_std__shared_ptr_HybridVideoPlayerFactorySpec_(const std::shared_ptr<HybridVideoPlayerFactorySpec>& strong) { return strong; }
  
  // pragma MARK: Result<std::shared_ptr<HybridVideoPlayerSpec>>
  using Result_std__shared_ptr_HybridVideoPlayerSpec__ = Result<std::shared_ptr<HybridVideoPlayerSpec>>;
  inline Result_std__shared_ptr_HybridVideoPlayerSpec__ create_Result_std__shared_ptr_HybridVideoPlayerSpec__(const std::shared_ptr<HybridVideoPlayerSpec>& value) {
    return Result<std::shared_ptr<HybridVideoPlayerSpec>>::withValue(value);
  }
  inline Result_std__shared_ptr_HybridVideoPlayerSpec__ create_Result_std__shared_ptr_HybridVideoPlayerSpec__(const std::exception_ptr& error) {
    return Result<std::shared_ptr<HybridVideoPlayerSpec>>::withError(error);
  }
  
  // pragma MARK: std::function<void(bool /* hasAudioFocus */)>
  /**
   * Specialized version of `std::function<void(bool)>`.
   */
  using Func_void_bool = std::function<void(bool /* hasAudioFocus */)>;
  /**
   * Wrapper class for a `std::function<void(bool / * hasAudioFocus * /)>`, this can be used from Swift.
   */
  class Func_void_bool_Wrapper final {
  public:
    explicit Func_void_bool_Wrapper(std::function<void(bool /* hasAudioFocus */)>&& func): _function(std::make_unique<std::function<void(bool /* hasAudioFocus */)>>(std::move(func))) {}
    inline void call(bool hasAudioFocus) const {
      _function->operator()(hasAudioFocus);
    }
  private:
    std::unique_ptr<std::function<void(bool /* hasAudioFocus */)>> _function;
  } SWIFT_NONCOPYABLE;
  Func_void_bool create_Func_void_bool(void* _Nonnull swiftClosureWrapper);
  inline Func_void_bool_Wrapper wrap_Func_void_bool(Func_void_bool value) {
    return Func_void_bool_Wrapper(std::move(value));
  }
  
  // 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) {
    return std::optional<double>(value);
  }
  
  // pragma MARK: std::function<void(const BandwidthData& /* data */)>
  /**
   * Specialized version of `std::function<void(const BandwidthData&)>`.
   */
  using Func_void_BandwidthData = std::function<void(const BandwidthData& /* data */)>;
  /**
   * Wrapper class for a `std::function<void(const BandwidthData& / * data * /)>`, this can be used from Swift.
   */
  class Func_void_BandwidthData_Wrapper final {
  public:
    explicit Func_void_BandwidthData_Wrapper(std::function<void(const BandwidthData& /* data */)>&& func): _function(std::make_unique<std::function<void(const BandwidthData& /* data */)>>(std::move(func))) {}
    inline void call(BandwidthData data) const {
      _function->operator()(data);
    }
  private:
    std::unique_ptr<std::function<void(const BandwidthData& /* data */)>> _function;
  } SWIFT_NONCOPYABLE;
  Func_void_BandwidthData create_Func_void_BandwidthData(void* _Nonnull swiftClosureWrapper);
  inline Func_void_BandwidthData_Wrapper wrap_Func_void_BandwidthData(Func_void_BandwidthData value) {
    return Func_void_BandwidthData_Wrapper(std::move(value));
  }
  
  // pragma MARK: std::function<void(const onLoadData& /* data */)>
  /**
   * Specialized version of `std::function<void(const onLoadData&)>`.
   */
  using Func_void_onLoadData = std::function<void(const onLoadData& /* data */)>;
  /**
   * Wrapper class for a `std::function<void(const onLoadData& / * data * /)>`, this can be used from Swift.
   */
  class Func_void_onLoadData_Wrapper final {
  public:
    explicit Func_void_onLoadData_Wrapper(std::function<void(const onLoadData& /* data */)>&& func): _function(std::make_unique<std::function<void(const onLoadData& /* data */)>>(std::move(func))) {}
    inline void call(onLoadData data) const {
      _function->operator()(data);
    }
  private:
    std::unique_ptr<std::function<void(const onLoadData& /* data */)>> _function;
  } SWIFT_NONCOPYABLE;
  Func_void_onLoadData create_Func_void_onLoadData(void* _Nonnull swiftClosureWrapper);
  inline Func_void_onLoadData_Wrapper wrap_Func_void_onLoadData(Func_void_onLoadData value) {
    return Func_void_onLoadData_Wrapper(std::move(value));
  }
  
  // pragma MARK: std::function<void(const onLoadStartData& /* data */)>
  /**
   * Specialized version of `std::function<void(const onLoadStartData&)>`.
   */
  using Func_void_onLoadStartData = std::function<void(const onLoadStartData& /* data */)>;
  /**
   * Wrapper class for a `std::function<void(const onLoadStartData& / * data * /)>`, this can be used from Swift.
   */
  class Func_void_onLoadStartData_Wrapper final {
  public:
    explicit Func_void_onLoadStartData_Wrapper(std::function<void(const onLoadStartData& /* data */)>&& func): _function(std::make_unique<std::function<void(const onLoadStartData& /* data */)>>(std::move(func))) {}
    inline void call(onLoadStartData data) const {
      _function->operator()(data);
    }
  private:
    std::unique_ptr<std::function<void(const onLoadStartData& /* data */)>> _function;
  } SWIFT_NONCOPYABLE;
  Func_void_onLoadStartData create_Func_void_onLoadStartData(void* _Nonnull swiftClosureWrapper);
  inline Func_void_onLoadStartData_Wrapper wrap_Func_void_onLoadStartData(Func_void_onLoadStartData value) {
    return Func_void_onLoadStartData_Wrapper(std::move(value));
  }
  
  // pragma MARK: std::function<void(const onPlaybackStateChangeData& /* data */)>
  /**
   * Specialized version of `std::function<void(const onPlaybackStateChangeData&)>`.
   */
  using Func_void_onPlaybackStateChangeData = std::function<void(const onPlaybackStateChangeData& /* data */)>;
  /**
   * Wrapper class for a `std::function<void(const onPlaybackStateChangeData& / * data * /)>`, this can be used from Swift.
   */
  class Func_void_onPlaybackStateChangeData_Wrapper final {
  public:
    explicit Func_void_onPlaybackStateChangeData_Wrapper(std::function<void(const onPlaybackStateChangeData& /* data */)>&& func): _function(std::make_unique<std::function<void(const onPlaybackStateChangeData& /* data */)>>(std::move(func))) {}
    inline void call(onPlaybackStateChangeData data) const {
      _function->operator()(data);
    }
  private:
    std::unique_ptr<std::function<void(const onPlaybackStateChangeData& /* data */)>> _function;
  } SWIFT_NONCOPYABLE;
  Func_void_onPlaybackStateChangeData create_Func_void_onPlaybackStateChangeData(void* _Nonnull swiftClosureWrapper);
  inline Func_void_onPlaybackStateChangeData_Wrapper wrap_Func_void_onPlaybackStateChangeData(Func_void_onPlaybackStateChangeData value) {
    return Func_void_onPlaybackStateChangeData_Wrapper(std::move(value));
  }
  
  // pragma MARK: std::function<void(double /* rate */)>
  /**
   * Specialized version of `std::function<void(double)>`.
   */
  using Func_void_double = std::function<void(double /* rate */)>;
  /**
   * Wrapper class for a `std::function<void(double / * rate * /)>`, this can be used from Swift.
   */
  class Func_void_double_Wrapper final {
  public:
    explicit Func_void_double_Wrapper(std::function<void(double /* rate */)>&& func): _function(std::make_unique<std::function<void(double /* rate */)>>(std::move(func))) {}
    inline void call(double rate) const {
      _function->operator()(rate);
    }
  private:
    std::unique_ptr<std::function<void(double /* rate */)>> _function;
  } SWIFT_NONCOPYABLE;
  Func_void_double create_Func_void_double(void* _Nonnull swiftClosureWrapper);
  inline Func_void_double_Wrapper wrap_Func_void_double(Func_void_double value) {
    return Func_void_double_Wrapper(std::move(value));
  }
  
  // pragma MARK: std::function<void(const onProgressData& /* data */)>
  /**
   * Specialized version of `std::function<void(const onProgressData&)>`.
   */
  using Func_void_onProgressData = std::function<void(const onProgressData& /* data */)>;
  /**
   * Wrapper class for a `std::function<void(const onProgressData& / * data * /)>`, this can be used from Swift.
   */
  class Func_void_onProgressData_Wrapper final {
  public:
    explicit Func_void_onProgressData_Wrapper(std::function<void(const onProgressData& /* data */)>&& func): _function(std::make_unique<std::function<void(const onProgressData& /* data */)>>(std::move(func))) {}
    inline void call(onProgressData data) const {
      _function->operator()(data);
    }
  private:
    std::unique_ptr<std::function<void(const onProgressData& /* data */)>> _function;
  } SWIFT_NONCOPYABLE;
  Func_void_onProgressData create_Func_void_onProgressData(void* _Nonnull swiftClosureWrapper);
  inline Func_void_onProgressData_Wrapper wrap_Func_void_onProgressData(Func_void_onProgressData value) {
    return Func_void_onProgressData_Wrapper(std::move(value));
  }
  
  // pragma MARK: std::vector<TimedMetadataObject>
  /**
   * Specialized version of `std::vector<TimedMetadataObject>`.
   */
  using std__vector_TimedMetadataObject_ = std::vector<TimedMetadataObject>;
  inline std::vector<TimedMetadataObject> create_std__vector_TimedMetadataObject_(size_t size) {
    std::vector<TimedMetadataObject> vector;
    vector.reserve(size);
    return vector;
  }
  
  // pragma MARK: std::function<void(const TimedMetadata& /* metadata */)>
  /**
   * Specialized version of `std::function<void(const TimedMetadata&)>`.
   */
  using Func_void_TimedMetadata = std::function<void(const TimedMetadata& /* metadata */)>;
  /**
   * Wrapper class for a `std::function<void(const TimedMetadata& / * metadata * /)>`, this can be used from Swift.
   */
  class Func_void_TimedMetadata_Wrapper final {
  public:
    explicit Func_void_TimedMetadata_Wrapper(std::function<void(const TimedMetadata& /* metadata */)>&& func): _function(std::make_unique<std::function<void(const TimedMetadata& /* metadata */)>>(std::move(func))) {}
    inline void call(TimedMetadata metadata) const {
      _function->operator()(metadata);
    }
  private:
    std::unique_ptr<std::function<void(const TimedMetadata& /* metadata */)>> _function;
  } SWIFT_NONCOPYABLE;
  Func_void_TimedMetadata create_Func_void_TimedMetadata(void* _Nonnull swiftClosureWrapper);
  inline Func_void_TimedMetadata_Wrapper wrap_Func_void_TimedMetadata(Func_void_TimedMetadata value) {
    return Func_void_TimedMetadata_Wrapper(std::move(value));
  }
  
  // pragma MARK: std::vector<std::string>
  /**
   * Specialized version of `std::vector<std::string>`.
   */
  using std__vector_std__string_ = std::vector<std::string>;
  inline std::vector<std::string> create_std__vector_std__string_(size_t size) {
    std::vector<std::string> vector;
    vector.reserve(size);
    return vector;
  }
  
  // pragma MARK: std::function<void(const std::vector<std::string>& /* texts */)>
  /**
   * Specialized version of `std::function<void(const std::vector<std::string>&)>`.
   */
  using Func_void_std__vector_std__string_ = std::function<void(const std::vector<std::string>& /* texts */)>;
  /**
   * Wrapper class for a `std::function<void(const std::vector<std::string>& / * texts * /)>`, this can be used from Swift.
   */
  class Func_void_std__vector_std__string__Wrapper final {
  public:
    explicit Func_void_std__vector_std__string__Wrapper(std::function<void(const std::vector<std::string>& /* texts */)>&& func): _function(std::make_unique<std::function<void(const std::vector<std::string>& /* texts */)>>(std::move(func))) {}
    inline void call(std::vector<std::string> texts) const {
      _function->operator()(texts);
    }
  private:
    std::unique_ptr<std::function<void(const std::vector<std::string>& /* texts */)>> _function;
  } SWIFT_NONCOPYABLE;
  Func_void_std__vector_std__string_ create_Func_void_std__vector_std__string_(void* _Nonnull swiftClosureWrapper);
  inline Func_void_std__vector_std__string__Wrapper wrap_Func_void_std__vector_std__string_(Func_void_std__vector_std__string_ value) {
    return Func_void_std__vector_std__string__Wrapper(std::move(value));
  }
  
  // pragma MARK: std::function<void(const std::optional<TextTrack>& /* track */)>
  /**
   * Specialized version of `std::function<void(const std::optional<TextTrack>&)>`.
   */
  using Func_void_std__optional_TextTrack_ = std::function<void(const std::optional<TextTrack>& /* track */)>;
  /**
   * Wrapper class for a `std::function<void(const std::optional<TextTrack>& / * track * /)>`, this can be used from Swift.
   */
  class Func_void_std__optional_TextTrack__Wrapper final {
  public:
    explicit Func_void_std__optional_TextTrack__Wrapper(std::function<void(const std::optional<TextTrack>& /* track */)>&& func): _function(std::make_unique<std::function<void(const std::optional<TextTrack>& /* track */)>>(std::move(func))) {}
    inline void call(std::optional<TextTrack> track) const {
      _function->operator()(track);
    }
  private:
    std::unique_ptr<std::function<void(const std::optional<TextTrack>& /* track */)>> _function;
  } SWIFT_NONCOPYABLE;
  Func_void_std__optional_TextTrack_ create_Func_void_std__optional_TextTrack_(void* _Nonnull swiftClosureWrapper);
  inline Func_void_std__optional_TextTrack__Wrapper wrap_Func_void_std__optional_TextTrack_(Func_void_std__optional_TextTrack_ value) {
    return Func_void_std__optional_TextTrack__Wrapper(std::move(value));
  }
  
  // pragma MARK: std::function<void(const onVolumeChangeData& /* data */)>
  /**
   * Specialized version of `std::function<void(const onVolumeChangeData&)>`.
   */
  using Func_void_onVolumeChangeData = std::function<void(const onVolumeChangeData& /* data */)>;
  /**
   * Wrapper class for a `std::function<void(const onVolumeChangeData& / * data * /)>`, this can be used from Swift.
   */
  class Func_void_onVolumeChangeData_Wrapper final {
  public:
    explicit Func_void_onVolumeChangeData_Wrapper(std::function<void(const onVolumeChangeData& /* data */)>&& func): _function(std::make_unique<std::function<void(const onVolumeChangeData& /* data */)>>(std::move(func))) {}
    inline void call(onVolumeChangeData data) const {
      _function->operator()(data);
    }
  private:
    std::unique_ptr<std::function<void(const onVolumeChangeData& /* data */)>> _function;
  } SWIFT_NONCOPYABLE;
  Func_void_onVolumeChangeData create_Func_void_onVolumeChangeData(void* _Nonnull swiftClosureWrapper);
  inline Func_void_onVolumeChangeData_Wrapper wrap_Func_void_onVolumeChangeData(Func_void_onVolumeChangeData value) {
    return Func_void_onVolumeChangeData_Wrapper(std::move(value));
  }
  
  // pragma MARK: std::function<void(VideoPlayerStatus /* status */)>
  /**
   * Specialized version of `std::function<void(VideoPlayerStatus)>`.
   */
  using Func_void_VideoPlayerStatus = std::function<void(VideoPlayerStatus /* status */)>;
  /**
   * Wrapper class for a `std::function<void(VideoPlayerStatus / * status * /)>`, this can be used from Swift.
   */
  class Func_void_VideoPlayerStatus_Wrapper final {
  public:
    explicit Func_void_VideoPlayerStatus_Wrapper(std::function<void(VideoPlayerStatus /* status */)>&& func): _function(std::make_unique<std::function<void(VideoPlayerStatus /* status */)>>(std::move(func))) {}
    inline void call(int status) const {
      _function->operator()(static_cast<VideoPlayerStatus>(status));
    }
  private:
    std::unique_ptr<std::function<void(VideoPlayerStatus /* status */)>> _function;
  } SWIFT_NONCOPYABLE;
  Func_void_VideoPlayerStatus create_Func_void_VideoPlayerStatus(void* _Nonnull swiftClosureWrapper);
  inline Func_void_VideoPlayerStatus_Wrapper wrap_Func_void_VideoPlayerStatus(Func_void_VideoPlayerStatus value) {
    return Func_void_VideoPlayerStatus_Wrapper(std::move(value));
  }
  
  // pragma MARK: std::vector<NativeExternalSubtitle>
  /**
   * Specialized version of `std::vector<NativeExternalSubtitle>`.
   */
  using std__vector_NativeExternalSubtitle_ = std::vector<NativeExternalSubtitle>;
  inline std::vector<NativeExternalSubtitle> create_std__vector_NativeExternalSubtitle_(size_t size) {
    std::vector<NativeExternalSubtitle> vector;
    vector.reserve(size);
    return vector;
  }
  
  // pragma MARK: std::optional<std::vector<NativeExternalSubtitle>>
  /**
   * Specialized version of `std::optional<std::vector<NativeExternalSubtitle>>`.
   */
  using std__optional_std__vector_NativeExternalSubtitle__ = std::optional<std::vector<NativeExternalSubtitle>>;
  inline std::optional<std::vector<NativeExternalSubtitle>> create_std__optional_std__vector_NativeExternalSubtitle__(const std::vector<NativeExternalSubtitle>& value) {
    return std::optional<std::vector<NativeExternalSubtitle>>(value);
  }
  
  // pragma MARK: std::unordered_map<std::string, std::string>
  /**
   * Specialized version of `std::unordered_map<std::string, std::string>`.
   */
  using std__unordered_map_std__string__std__string_ = std::unordered_map<std::string, std::string>;
  inline std::unordered_map<std::string, std::string> create_std__unordered_map_std__string__std__string_(size_t size) {
    std::unordered_map<std::string, std::string> map;
    map.reserve(size);
    return map;
  }
  inline std::vector<std::string> get_std__unordered_map_std__string__std__string__keys(const std__unordered_map_std__string__std__string_& map) {
    std::vector<std::string> keys;
    keys.reserve(map.size());
    for (const auto& entry : map) {
      keys.push_back(entry.first);
    }
    return keys;
  }
  inline std::string get_std__unordered_map_std__string__std__string__value(const std__unordered_map_std__string__std__string_& map, const std::string& key) {
    return map.at(key);
  }
  inline void emplace_std__unordered_map_std__string__std__string_(std__unordered_map_std__string__std__string_& map, const std::string& key, const std::string& value) {
    map.emplace(key, value);
  }
  
  // pragma MARK: std::optional<std::unordered_map<std::string, std::string>>
  /**
   * Specialized version of `std::optional<std::unordered_map<std::string, std::string>>`.
   */
  using std__optional_std__unordered_map_std__string__std__string__ = std::optional<std::unordered_map<std::string, std::string>>;
  inline std::optional<std::unordered_map<std::string, std::string>> create_std__optional_std__unordered_map_std__string__std__string__(const std::unordered_map<std::string, std::string>& value) {
    return std::optional<std::unordered_map<std::string, std::string>>(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) {
    return std::optional<bool>(value);
  }
  
  // pragma MARK: std::shared_ptr<Promise<std::string>>
  /**
   * Specialized version of `std::shared_ptr<Promise<std::string>>`.
   */
  using std__shared_ptr_Promise_std__string__ = std::shared_ptr<Promise<std::string>>;
  inline std::shared_ptr<Promise<std::string>> create_std__shared_ptr_Promise_std__string__() {
    return Promise<std::string>::create();
  }
  inline PromiseHolder<std::string> wrap_std__shared_ptr_Promise_std__string__(std::shared_ptr<Promise<std::string>> promise) {
    return PromiseHolder<std::string>(std::move(promise));
  }
  
  // pragma MARK: std::function<void(const std::string& /* result */)>
  /**
   * Specialized version of `std::function<void(const std::string&)>`.
   */
  using Func_void_std__string = std::function<void(const std::string& /* result */)>;
  /**
   * Wrapper class for a `std::function<void(const std::string& / * result * /)>`, 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& /* result */)>&& func): _function(std::make_unique<std::function<void(const std::string& /* result */)>>(std::move(func))) {}
    inline void call(std::string result) const {
      _function->operator()(result);
    }
  private:
    std::unique_ptr<std::function<void(const std::string& /* result */)>> _function;
  } SWIFT_NONCOPYABLE;
  Func_void_std__string create_Func_void_std__string(void* _Nonnull swiftClosureWrapper);
  inline Func_void_std__string_Wrapper wrap_Func_void_std__string(Func_void_std__string value) {
    return Func_void_std__string_Wrapper(std::move(value));
  }
  
  // pragma MARK: std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<std::string>>>>(const OnGetLicensePayload& /* payload */)>
  /**
   * Specialized version of `std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<std::string>>>>(const OnGetLicensePayload&)>`.
   */
  using Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload = std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<std::string>>>>(const OnGetLicensePayload& /* payload */)>;
  /**
   * Wrapper class for a `std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<std::string>>>>(const OnGetLicensePayload& / * payload * /)>`, this can be used from Swift.
   */
  class Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload_Wrapper final {
  public:
    explicit Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload_Wrapper(std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<std::string>>>>(const OnGetLicensePayload& /* payload */)>&& func): _function(std::make_unique<std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<std::string>>>>(const OnGetLicensePayload& /* payload */)>>(std::move(func))) {}
    inline std::shared_ptr<Promise<std::shared_ptr<Promise<std::string>>>> call(OnGetLicensePayload payload) const {
      auto __result = _function->operator()(payload);
      return __result;
    }
  private:
    std::unique_ptr<std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<std::string>>>>(const OnGetLicensePayload& /* payload */)>> _function;
  } SWIFT_NONCOPYABLE;
  Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload create_Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload(void* _Nonnull swiftClosureWrapper);
  inline Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload_Wrapper wrap_Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload(Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload value) {
    return Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____OnGetLicensePayload_Wrapper(std::move(value));
  }
  
  // pragma MARK: std::shared_ptr<Promise<std::shared_ptr<Promise<std::string>>>>
  /**
   * Specialized version of `std::shared_ptr<Promise<std::shared_ptr<Promise<std::string>>>>`.
   */
  using std__shared_ptr_Promise_std__shared_ptr_Promise_std__string____ = std::shared_ptr<Promise<std::shared_ptr<Promise<std::string>>>>;
  inline std::shared_ptr<Promise<std::shared_ptr<Promise<std::string>>>> create_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string____() {
    return Promise<std::shared_ptr<Promise<std::string>>>::create();
  }
  inline PromiseHolder<std::shared_ptr<Promise<std::string>>> wrap_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string____(std::shared_ptr<Promise<std::shared_ptr<Promise<std::string>>>> promise) {
    return PromiseHolder<std::shared_ptr<Promise<std::string>>>(std::move(promise));
  }
  
  // pragma MARK: std::function<void(const std::shared_ptr<Promise<std::string>>& /* result */)>
  /**
   * Specialized version of `std::function<void(const std::shared_ptr<Promise<std::string>>&)>`.
   */
  using Func_void_std__shared_ptr_Promise_std__string__ = std::function<void(const std::shared_ptr<Promise<std::string>>& /* result */)>;
  /**
   * Wrapper class for a `std::function<void(const std::shared_ptr<Promise<std::string>>& / * result * /)>`, this can be used from Swift.
   */
  class Func_void_std__shared_ptr_Promise_std__string___Wrapper final {
  public:
    explicit Func_void_std__shared_ptr_Promise_std__string___Wrapper(std::function<void(const std::shared_ptr<Promise<std::string>>& /* result */)>&& func): _function(std::make_unique<std::function<void(const std::shared_ptr<Promise<std::string>>& /* result */)>>(std::move(func))) {}
    inline void call(std::shared_ptr<Promise<std::string>> result) const {
      _function->operator()(result);
    }
  private:
    std::unique_ptr<std::function<void(const std::shared_ptr<Promise<std::string>>& /* result */)>> _function;
  } SWIFT_NONCOPYABLE;
  Func_void_std__shared_ptr_Promise_std__string__ create_Func_void_std__shared_ptr_Promise_std__string__(void* _Nonnull swiftClosureWrapper);
  inline Func_void_std__shared_ptr_Promise_std__string___Wrapper wrap_Func_void_std__shared_ptr_Promise_std__string__(Func_void_std__shared_ptr_Promise_std__string__ value) {
    return Func_void_std__shared_ptr_Promise_std__string___Wrapper(std::move(value));
  }
  
  // pragma MARK: std::optional<std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<std::string>>>>(const OnGetLicensePayload& /* payload */)>>
  /**
   * Specialized version of `std::optional<std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<std::string>>>>(const OnGetLicensePayload& / * payload * /)>>`.
   */
  using std__optional_std__function_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____const_OnGetLicensePayload_____payload______ = std::optional<std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<std::string>>>>(const OnGetLicensePayload& /* payload */)>>;
  inline std::optional<std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<std::string>>>>(const OnGetLicensePayload& /* payload */)>> create_std__optional_std__function_std__shared_ptr_Promise_std__shared_ptr_Promise_std__string_____const_OnGetLicensePayload_____payload______(const std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<std::string>>>>(const OnGetLicensePayload& /* payload */)>& value) {
    return std::optional<std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<std::string>>>>(const OnGetLicensePayload& /* payload */)>>(value);
  }
  
  // pragma MARK: std::optional<NativeDrmParams>
  /**
   * Specialized version of `std::optional<NativeDrmParams>`.
   */
  using std__optional_NativeDrmParams_ = std::optional<NativeDrmParams>;
  inline std::optional<NativeDrmParams> create_std__optional_NativeDrmParams_(const NativeDrmParams& value) {
    return std::optional<NativeDrmParams>(value);
  }
  
  // pragma MARK: std::optional<LivePlaybackParams>
  /**
   * Specialized version of `std::optional<LivePlaybackParams>`.
   */
  using std__optional_LivePlaybackParams_ = std::optional<LivePlaybackParams>;
  inline std::optional<LivePlaybackParams> create_std__optional_LivePlaybackParams_(const LivePlaybackParams& value) {
    return std::optional<LivePlaybackParams>(value);
  }
  
  // pragma MARK: std::optional<Resolution>
  /**
   * Specialized version of `std::optional<Resolution>`.
   */
  using std__optional_Resolution_ = std::optional<Resolution>;
  inline std::optional<Resolution> create_std__optional_Resolution_(const Resolution& value) {
    return std::optional<Resolution>(value);
  }
  
  // pragma MARK: std::optional<BufferConfig>
  /**
   * Specialized version of `std::optional<BufferConfig>`.
   */
  using std__optional_BufferConfig_ = std::optional<BufferConfig>;
  inline std::optional<BufferConfig> create_std__optional_BufferConfig_(const BufferConfig& value) {
    return std::optional<BufferConfig>(value);
  }
  
  // pragma MARK: std::shared_ptr<Promise<VideoInformation>>
  /**
   * Specialized version of `std::shared_ptr<Promise<VideoInformation>>`.
   */
  using std__shared_ptr_Promise_VideoInformation__ = std::shared_ptr<Promise<VideoInformation>>;
  inline std::shared_ptr<Promise<VideoInformation>> create_std__shared_ptr_Promise_VideoInformation__() {
    return Promise<VideoInformation>::create();
  }
  inline PromiseHolder<VideoInformation> wrap_std__shared_ptr_Promise_VideoInformation__(std::shared_ptr<Promise<VideoInformation>> promise) {
    return PromiseHolder<VideoInformation>(std::move(promise));
  }
  
  // pragma MARK: std::function<void(const VideoInformation& /* result */)>
  /**
   * Specialized version of `std::function<void(const VideoInformation&)>`.
   */
  using Func_void_VideoInformation = std::function<void(const VideoInformation& /* result */)>;
  /**
   * Wrapper class for a `std::function<void(const VideoInformation& / * result * /)>`, this can be used from Swift.
   */
  class Func_void_VideoInformation_Wrapper final {
  public:
    explicit Func_void_VideoInformation_Wrapper(std::function<void(const VideoInformation& /* result */)>&& func): _function(std::make_unique<std::function<void(const VideoInformation& /* result */)>>(std::move(func))) {}
    inline void call(VideoInformation result) const {
      _function->operator()(result);
    }
  private:
    std::unique_ptr<std::function<void(const VideoInformation& /* result */)>> _function;
  } SWIFT_NONCOPYABLE;
  Func_void_VideoInformation create_Func_void_VideoInformation(void* _Nonnull swiftClosureWrapper);
  inline Func_void_VideoInformation_Wrapper wrap_Func_void_VideoInformation(Func_void_VideoInformation value) {
    return Func_void_VideoInformation_Wrapper(std::move(value));
  }
  
  // pragma MARK: Result<std::shared_ptr<Promise<VideoInformation>>>
  using Result_std__shared_ptr_Promise_VideoInformation___ = Result<std::shared_ptr<Promise<VideoInformation>>>;
  inline Result_std__shared_ptr_Promise_VideoInformation___ create_Result_std__shared_ptr_Promise_VideoInformation___(const std::shared_ptr<Promise<VideoInformation>>& value) {
    return Result<std::shared_ptr<Promise<VideoInformation>>>::withValue(value);
  }
  inline Result_std__shared_ptr_Promise_VideoInformation___ create_Result_std__shared_ptr_Promise_VideoInformation___(const std::exception_ptr& error) {
    return Result<std::shared_ptr<Promise<VideoInformation>>>::withError(error);
  }
  
  // pragma MARK: std::shared_ptr<HybridVideoPlayerSourceFactorySpec>
  /**
   * Specialized version of `std::shared_ptr<HybridVideoPlayerSourceFactorySpec>`.
   */
  using std__shared_ptr_HybridVideoPlayerSourceFactorySpec_ = std::shared_ptr<HybridVideoPlayerSourceFactorySpec>;
  std::shared_ptr<HybridVideoPlayerSourceFactorySpec> create_std__shared_ptr_HybridVideoPlayerSourceFactorySpec_(void* _Nonnull swiftUnsafePointer);
  void* _Nonnull get_std__shared_ptr_HybridVideoPlayerSourceFactorySpec_(std__shared_ptr_HybridVideoPlayerSourceFactorySpec_ cppType);
  
  // pragma MARK: std::weak_ptr<HybridVideoPlayerSourceFactorySpec>
  using std__weak_ptr_HybridVideoPlayerSourceFactorySpec_ = std::weak_ptr<HybridVideoPlayerSourceFactorySpec>;
  inline std__weak_ptr_HybridVideoPlayerSourceFactorySpec_ weakify_std__shared_ptr_HybridVideoPlayerSourceFactorySpec_(const std::shared_ptr<HybridVideoPlayerSourceFactorySpec>& strong) { return strong; }
  
  // pragma MARK: Result<std::shared_ptr<HybridVideoPlayerSourceSpec>>
  using Result_std__shared_ptr_HybridVideoPlayerSourceSpec__ = Result<std::shared_ptr<HybridVideoPlayerSourceSpec>>;
  inline Result_std__shared_ptr_HybridVideoPlayerSourceSpec__ create_Result_std__shared_ptr_HybridVideoPlayerSourceSpec__(const std::shared_ptr<HybridVideoPlayerSourceSpec>& value) {
    return Result<std::shared_ptr<HybridVideoPlayerSourceSpec>>::withValue(value);
  }
  inline Result_std__shared_ptr_HybridVideoPlayerSourceSpec__ create_Result_std__shared_ptr_HybridVideoPlayerSourceSpec__(const std::exception_ptr& error) {
    return Result<std::shared_ptr<HybridVideoPlayerSourceSpec>>::withError(error);
  }
  
  // pragma MARK: std::optional<std::shared_ptr<HybridVideoPlayerSpec>>
  /**
   * Specialized version of `std::optional<std::shared_ptr<HybridVideoPlayerSpec>>`.
   */
  using std__optional_std__shared_ptr_HybridVideoPlayerSpec__ = std::optional<std::shared_ptr<HybridVideoPlayerSpec>>;
  inline std::optional<std::shared_ptr<HybridVideoPlayerSpec>> create_std__optional_std__shared_ptr_HybridVideoPlayerSpec__(const std::shared_ptr<HybridVideoPlayerSpec>& value) {
    return std::optional<std::shared_ptr<HybridVideoPlayerSpec>>(value);
  }
  
  // pragma MARK: std::optional<std::function<void(bool /* isInPictureInPicture */)>>
  /**
   * Specialized version of `std::optional<std::function<void(bool / * isInPictureInPicture * /)>>`.
   */
  using std__optional_std__function_void_bool____isInPictureInPicture______ = std::optional<std::function<void(bool /* isInPictureInPicture */)>>;
  inline std::optional<std::function<void(bool /* isInPictureInPicture */)>> create_std__optional_std__function_void_bool____isInPictureInPicture______(const std::function<void(bool /* isInPictureInPicture */)>& value) {
    return std::optional<std::function<void(bool /* isInPictureInPicture */)>>(value);
  }
  
  // pragma MARK: std::optional<std::function<void(bool /* fullscreen */)>>
  /**
   * Specialized version of `std::optional<std::function<void(bool / * fullscreen * /)>>`.
   */
  using std__optional_std__function_void_bool____fullscreen______ = std::optional<std::function<void(bool /* fullscreen */)>>;
  inline std::optional<std::function<void(bool /* fullscreen */)>> create_std__optional_std__function_void_bool____fullscreen______(const std::function<void(bool /* fullscreen */)>& value) {
    return std::optional<std::function<void(bool /* fullscreen */)>>(value);
  }
  
  // pragma MARK: std::optional<std::function<void()>>
  /**
   * Specialized version of `std::optional<std::function<void()>>`.
   */
  using std__optional_std__function_void____ = std::optional<std::function<void()>>;
  inline std::optional<std::function<void()>> create_std__optional_std__function_void____(const std::function<void()>& value) {
    return std::optional<std::function<void()>>(value);
  }
  
  // pragma MARK: std::shared_ptr<HybridVideoViewViewManagerSpec>
  /**
   * Specialized version of `std::shared_ptr<HybridVideoViewViewManagerSpec>`.
   */
  using std__shared_ptr_HybridVideoViewViewManagerSpec_ = std::shared_ptr<HybridVideoViewViewManagerSpec>;
  std::shared_ptr<HybridVideoViewViewManagerSpec> create_std__shared_ptr_HybridVideoViewViewManagerSpec_(void* _Nonnull swiftUnsafePointer);
  void* _Nonnull get_std__shared_ptr_HybridVideoViewViewManagerSpec_(std__shared_ptr_HybridVideoViewViewManagerSpec_ cppType);
  
  // pragma MARK: std::weak_ptr<HybridVideoViewViewManagerSpec>
  using std__weak_ptr_HybridVideoViewViewManagerSpec_ = std::weak_ptr<HybridVideoViewViewManagerSpec>;
  inline std__weak_ptr_HybridVideoViewViewManagerSpec_ weakify_std__shared_ptr_HybridVideoViewViewManagerSpec_(const std::shared_ptr<HybridVideoViewViewManagerSpec>& strong) { return strong; }
  
  // pragma MARK: Result<bool>
  using Result_bool_ = Result<bool>;
  inline Result_bool_ create_Result_bool_(bool value) {
    return Result<bool>::withValue(std::move(value));
  }
  inline Result_bool_ create_Result_bool_(const std::exception_ptr& error) {
    return Result<bool>::withError(error);
  }
  
  // pragma MARK: std::shared_ptr<HybridVideoViewViewManagerFactorySpec>
  /**
   * Specialized version of `std::shared_ptr<HybridVideoViewViewManagerFactorySpec>`.
   */
  using std__shared_ptr_HybridVideoViewViewManagerFactorySpec_ = std::shared_ptr<HybridVideoViewViewManagerFactorySpec>;
  std::shared_ptr<HybridVideoViewViewManagerFactorySpec> create_std__shared_ptr_HybridVideoViewViewManagerFactorySpec_(void* _Nonnull swiftUnsafePointer);
  void* _Nonnull get_std__shared_ptr_HybridVideoViewViewManagerFactorySpec_(std__shared_ptr_HybridVideoViewViewManagerFactorySpec_ cppType);
  
  // pragma MARK: std::weak_ptr<HybridVideoViewViewManagerFactorySpec>
  using std__weak_ptr_HybridVideoViewViewManagerFactorySpec_ = std::weak_ptr<HybridVideoViewViewManagerFactorySpec>;
  inline std__weak_ptr_HybridVideoViewViewManagerFactorySpec_ weakify_std__shared_ptr_HybridVideoViewViewManagerFactorySpec_(const std::shared_ptr<HybridVideoViewViewManagerFactorySpec>& strong) { return strong; }
  
  // pragma MARK: Result<std::shared_ptr<HybridVideoViewViewManagerSpec>>
  using Result_std__shared_ptr_HybridVideoViewViewManagerSpec__ = Result<std::shared_ptr<HybridVideoViewViewManagerSpec>>;
  inline Result_std__shared_ptr_HybridVideoViewViewManagerSpec__ create_Result_std__shared_ptr_HybridVideoViewViewManagerSpec__(const std::shared_ptr<HybridVideoViewViewManagerSpec>& value) {
    return Result<std::shared_ptr<HybridVideoViewViewManagerSpec>>::withValue(value);
  }
  inline Result_std__shared_ptr_HybridVideoViewViewManagerSpec__ create_Result_std__shared_ptr_HybridVideoViewViewManagerSpec__(const std::exception_ptr& error) {
    return Result<std::shared_ptr<HybridVideoViewViewManagerSpec>>::withError(error);
  }

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