#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 Core;
using CoreCxxQtThread = ::rust::cxxqt1::CxxQtThread<Core>;

} // namespace CXX

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

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

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

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

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


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


namespace CXX::rust::cxxqtgen1 {
::QMetaObject::Connection
Core_device_eventConnect(CXX::Core& self, ::CXX::rust::cxxqtgen1::CoreCxxQtSignalHandlerdevice_event closure, ::Qt::ConnectionType type);
} // namespace CXX::rust::cxxqtgen1

namespace CXX::rust::cxxqtgen1 {
::QMetaObject::Connection
Core_init_failedConnect(CXX::Core& self, ::CXX::rust::cxxqtgen1::CoreCxxQtSignalHandlerinit_failed closure, ::Qt::ConnectionType type);
} // namespace CXX::rust::cxxqtgen1

namespace CXX::rust::cxxqtgen1 {
::QMetaObject::Connection
Core_no_pairing_fileConnect(CXX::Core& self, ::CXX::rust::cxxqtgen1::CoreCxxQtSignalHandlerno_pairing_file closure, ::Qt::ConnectionType type);
} // namespace CXX::rust::cxxqtgen1

namespace CXX::rust::cxxqtgen1 {
::QMetaObject::Connection
Core_sleepy_time_detectedConnect(CXX::Core& self, ::CXX::rust::cxxqtgen1::CoreCxxQtSignalHandlersleepy_time_detected closure, ::Qt::ConnectionType type);
} // namespace CXX::rust::cxxqtgen1

namespace CXX::rust::cxxqtgen1 {
::QMetaObject::Connection
Core_device_became_wiredConnect(CXX::Core& self, ::CXX::rust::cxxqtgen1::CoreCxxQtSignalHandlerdevice_became_wired closure, ::Qt::ConnectionType type);
} // namespace CXX::rust::cxxqtgen1

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

  virtual ~Core() = default;

public:
  Q_INVOKABLE void init() noexcept;
  Q_INVOKABLE void init_wireless_device(QString const& ip, QString const& pairing_file, QString const& mac_address) noexcept;
  Q_INVOKABLE QMap_QString_QVariant get_pairing_files() noexcept;
  Q_INVOKABLE void remove_device(QString const& udid) noexcept;
  Q_SIGNAL void device_event(::std::uint32_t event_type, QString const& udid, QString const& info);
  Q_SIGNAL void init_failed(QString const& mac_address);
  Q_SIGNAL void no_pairing_file(QString const& mac_address);
  Q_SIGNAL void sleepy_time_detected();
  Q_SIGNAL void device_became_wired(QString const& udid);
  explicit Core(QObject* parent = nullptr);

private:
  template<typename T>
friend auto ::rust::cxxqt1::qtThread(const T& qobject) -> ::rust::cxxqt1::CxxQtThread<T>;


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, Core>::value, "Core must inherit from QObject");
} // namespace CXX



Q_DECLARE_METATYPE(CXX::Core*)

