#pragma once

#include <cxx-qt/casting.h>
#include <cxx-qt/signalhandler.h>
#include <cxx-qt/threading.h>
#include <cxx-qt/type.h>

namespace CXX {
class ScreenshotBackend;
using ScreenshotBackendCxxQtThread = ::rust::cxxqt1::CxxQtThread<ScreenshotBackend>;

} // namespace CXX

namespace CXX::rust::cxxqtgen1 {
using ScreenshotBackendCxxQtSignalHandlerscreenshot_captured = ::rust::cxxqt1::SignalHandler<struct ScreenshotBackendCxxQtSignalParamsscreenshot_captured *>;
} // namespace CXX::rust::cxxqtgen1

namespace CXX::rust::cxxqtgen1 {
using ScreenshotBackendCxxQtSignalHandlerinit_failed = ::rust::cxxqt1::SignalHandler<struct ScreenshotBackendCxxQtSignalParamsinit_failed *>;
} // namespace CXX::rust::cxxqtgen1


#include "idescriptor_rust_codebase/src/screenshot.cxx.h"


namespace CXX::rust::cxxqtgen1 {
::QMetaObject::Connection
ScreenshotBackend_screenshot_capturedConnect(CXX::ScreenshotBackend& self, ::CXX::rust::cxxqtgen1::ScreenshotBackendCxxQtSignalHandlerscreenshot_captured closure, ::Qt::ConnectionType type);
} // namespace CXX::rust::cxxqtgen1

namespace CXX::rust::cxxqtgen1 {
::QMetaObject::Connection
ScreenshotBackend_init_failedConnect(CXX::ScreenshotBackend& self, ::CXX::rust::cxxqtgen1::ScreenshotBackendCxxQtSignalHandlerinit_failed closure, ::Qt::ConnectionType type);
} // namespace CXX::rust::cxxqtgen1

namespace CXX {
class ScreenshotBackend : public QObject, private ::rust::cxxqt1::CxxQtType<RScreenshotBackend>, private ::rust::cxxqt1::CxxQtThreading<ScreenshotBackend>
{
  Q_OBJECT
public:
  

  virtual ~ScreenshotBackend() = default;

public:
  Q_INVOKABLE void set_udid(QString const& udid) noexcept;
  Q_INVOKABLE void start_capture() noexcept;
  Q_SIGNAL void screenshot_captured(QByteArray data);
  Q_SIGNAL void init_failed(QString reason);
  explicit ScreenshotBackend(QString arg0, ::std::uint32_t arg1);

private:
  template<typename T>
friend auto ::rust::cxxqt1::qtThread(const T& qobject) -> ::rust::cxxqt1::CxxQtThread<T>;
  explicit ScreenshotBackend(::CXX::cxx_qt_ScreenshotBackend::CxxQtConstructorArguments0&& args);


private:
  template<typename Inner, typename Outer>
  friend Inner& ::rust::cxxqt1::unsafeRustMut(Outer& outer);

  template<typename Inner, typename Outer>
  friend const Inner& ::rust::cxxqt1::unsafeRust(const Outer& outer);
};

static_assert(::std::is_base_of<QObject, ScreenshotBackend>::value, "ScreenshotBackend must inherit from QObject");
} // namespace CXX



Q_DECLARE_METATYPE(CXX::ScreenshotBackend*)

