#pragma once #include #include class GNetworkResponse; class GNetworkJob : public GObject { public: enum class Error { None, ConnectionFailed, TransmissionFailed, ProtocolFailed, }; virtual ~GNetworkJob() override; Function on_finish; bool has_error() const { return m_error != Error::None; } Error error() const { return m_error; } GNetworkResponse* response() { return m_response.ptr(); } const GNetworkResponse* response() const { return m_response.ptr(); } virtual void start() = 0; virtual const char* class_name() const override { return "GNetworkJob"; } protected: GNetworkJob(); void did_finish(Retained&&); void did_fail(Error); private: RetainPtr m_response; Error m_error { Error::None }; };