geopro/src/data/api/NavRequest.hpp

40 lines
1.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include <functional>
#include <QObject>
#include <QPointer>
#include <QString>
#include <QVariant>
#include "IApiCall.hpp"
namespace geopro::data {
// 单请求异步句柄抽象基可测试缝payload 经 QVariant 承载,控制器侧 qvariant_cast<T> 取出。
class NavRequest : public QObject {
Q_OBJECT
public:
using QObject::QObject;
~NavRequest() override = default;
virtual void abort() = 0;
signals:
void done(const QVariant& value);
void failed(const QString& message);
};
// Api 实现:包一个 IApiCall + 注入的解析器ApiResponse → QVariant+ 失败谓词。
class ApiNavRequest : public NavRequest {
Q_OBJECT
public:
using Parser = std::function<QVariant(const geopro::net::ApiResponse&)>;
using Predicate = std::function<bool(const geopro::net::ApiResponse&)>;
ApiNavRequest(geopro::net::IApiCall* call, Parser parse, Predicate isFailure,
QObject* parent = nullptr); // 持有非拥有引用QPointercall 完成(finished)或 abort 后自行 deleteLater 自管理生命周期,本类不得 delete 它
void abort() override;
private:
QPointer<geopro::net::IApiCall> call_;
Parser parse_;
Predicate isFailure_;
bool aborted_ = false;
};
} // namespace geopro::data