#ifndef DYNAMICMETAOBJECTBUILDER_H
#define DYNAMICMETAOBJECTBUILDER_H
#include <QMetaObject>
#include <cstdint>
#include <memory>
#include "rust/cxx.h"
#include "dynamicmetaobjectdata.h"
class QMetaObjectBuilder;
class QMetaType;
class DynamicMetaObjectBuilder
{
public:
DynamicMetaObjectBuilder(const QMetaObject* staticMetaObj, rust::Str className);
~DynamicMetaObjectBuilder();
void addClassInfo(rust::Str name, rust::Str value);
void registerProperty(rust::Str name, uint32_t propId, const QMetaType& metaType, bool isConstant, rust::Str notifySignal);
void registerSignal(rust::Str name, rust::Slice<const QMetaType> argMetaTypes);
void registerSlot(rust::Str name, uint32_t slotId, rust::Slice<const QMetaType> argMetaTypes, const QMetaType& returnMetaType, Mutability mutability);
void endMetaRegistration();
const DynamicMetaObjectData* takeDynamicMetaObjectData();
private:
std::unique_ptr<QMetaObjectBuilder> m_mob;
std::unique_ptr<DynamicMetaObjectData> m_data;
};
std::unique_ptr<DynamicMetaObjectBuilder> createDynamicMetaObjectBuilder(rust::Str rustStructName, const QMetaObject& staticMeta);
#endif