validator描述输出

This commit is contained in:
codeboss 2024-11-18 23:33:51 +08:00
parent f14020493b
commit 036d94f7ca
5 changed files with 50 additions and 3 deletions

View File

@ -47,6 +47,18 @@ void Dispatch::runWith(IRunbase* unit) {
unit->run(); unit->run();
} }
void dispatch::Dispatch::getValidateDepict(datas::IDataObject& object) const {
for (auto key : _cmds_validators.keys()) {
if (_cmds_map.contains(key)) {
auto alias = _cmds_map[key].first;
auto vdesc = object.newObject();
_cmds_validators[key]->getDepict(*vdesc);
object.setChild(alias, vdesc);
}
}
}
QList<quint64> dispatch::Dispatch::allEvents() const { QList<quint64> dispatch::Dispatch::allEvents() const {
return _events_map.keys(); return _events_map.keys();
} }

View File

@ -35,6 +35,8 @@ namespace dispatch {
QString getCmdDefault(quint64 addr) const; QString getCmdDefault(quint64 addr) const;
void runWith(Inlet::IRunbase* unit); void runWith(Inlet::IRunbase* unit);
void getValidateDepict(datas::IDataObject &object) const;
QList<quint64> allEvents() const; QList<quint64> allEvents() const;
void registerEvent(quint64 addr, Inlet::IRunbase* unit); void registerEvent(quint64 addr, Inlet::IRunbase* unit);
void setEventAlias(quint64 addr, const QString& alias); void setEventAlias(quint64 addr, const QString& alias);

View File

@ -6,6 +6,7 @@
#include "cmds.h" #include "cmds.h"
#include "validate.h" #include "validate.h"
#include "validate_impl.h" #include "validate_impl.h"
#include "validate_depict.h"
int vp(int c) { int vp(int c) {
qDebug() << c; qDebug() << c;
@ -49,5 +50,9 @@ int main(int argc, char* argv[]) {
entry(3); entry(3);
xvv(2); xvv(2);
depict::ValidateDocObject doc;
dispatch::Dispatch::unique()->getValidateDepict(doc);
qDebug() << doc.toText();
return a.exec(); return a.exec();
} }

View File

@ -8,6 +8,9 @@
namespace validate { namespace validate {
template<typename T> class Validator { template<typename T> class Validator {
public: public:
virtual QString name() const {
return QString();
}
virtual bool check(T value) const { virtual bool check(T value) const {
return false; return false;
} }
@ -23,11 +26,12 @@ namespace validate {
template<typename... args_type> struct ValidateTemplet; template<typename... args_type> struct ValidateTemplet;
template<> struct ValidateTemplet<> { template<> struct ValidateTemplet<> {
template<typename Ret> template<typename Ret>
bool validateFor(Inlet::SignatureImpl<Ret>& value_sequence) const { bool validateFor(Inlet::SignatureImpl<Ret>& value_sequence) const {
return true; return true;
} }
virtual void getDepict(datas::IDataObject& self_description) const {}
}; };
template<typename head_type, typename... rest_type> template<typename head_type, typename... rest_type>
struct ValidateTemplet<head_type, rest_type...> : public ValidateTemplet<rest_type...> { struct ValidateTemplet<head_type, rest_type...> : public ValidateTemplet<rest_type...> {
@ -52,6 +56,21 @@ namespace validate {
return false; return false;
return ValidateTemplet<rest_type...>::validateFor(value_sequence); return ValidateTemplet<rest_type...>::validateFor(value_sequence);
} }
virtual void getDepict(datas::IDataObject& self_description) const {
auto args_head = self_description.newObject();
for (auto vinst : validator_list) {
auto vdesc = self_description.newObject();
vinst->getDepict(*vdesc);
args_head->setChild(vinst->name(), vdesc);
}
auto args_array = std::dynamic_pointer_cast<datas::IDataArray>(self_description.getChild(u8"ArgsList"));
args_array->append(args_head);
self_description.setChild(u8"ArgsList", args_array);
ValidateTemplet<rest_type...>::getDepict(self_description);
}
}; };
@ -156,6 +175,7 @@ namespace validate {
class IValidatorTemplet { class IValidatorTemplet {
public: public:
virtual bool doValidate(Inlet::IRunbase* inst) const = 0; virtual bool doValidate(Inlet::IRunbase* inst) const = 0;
virtual void getDepict(datas::IDataObject& self_description) const = 0;
}; };
template<void* func, typename... types> struct ValidateImpls; template<void* func, typename... types> struct ValidateImpls;
@ -174,5 +194,13 @@ namespace validate {
auto valid_data = dynamic_cast<Inlet::CmdsImpl<func, return_type, args_type...>*>(inst); auto valid_data = dynamic_cast<Inlet::CmdsImpl<func, return_type, args_type...>*>(inst);
return ValidateTemplet<args_type...>::validateFor(valid_data->getArgSequence()); return ValidateTemplet<args_type...>::validateFor(valid_data->getArgSequence());
} }
virtual void getDepict(datas::IDataObject& self_description) const {
self_description.setString(u8"ValidateFor", QString::number((qulonglong)func));
auto array_l = self_description.newArray();
self_description.setChild(u8"ArgsList", array_l);
ValidateTemplet<args_type...>::getDepict(self_description);
}
}; };
} }

View File

@ -20,11 +20,11 @@ bool ValidateDocObject::isObject() const {
} }
std::shared_ptr<IDataArray> ValidateDocObject::newArray() const { std::shared_ptr<IDataArray> ValidateDocObject::newArray() const {
return std::shared_ptr<IDataArray>(); return std::make_shared<ValidateDocArray>();
} }
std::shared_ptr<IDataObject> ValidateDocObject::newObject() const { std::shared_ptr<IDataObject> ValidateDocObject::newObject() const {
return std::shared_ptr<IDataObject>(); return std::make_shared<ValidateDocObject>();
} }
std::shared_ptr<IDataComplex> ValidateDocObject::getChild(const QString& key) const { std::shared_ptr<IDataComplex> ValidateDocObject::getChild(const QString& key) const {