mirror of
https://github.com/geode-sdk/geode.git
synced 2024-11-23 16:07:52 -05:00
85 lines
2.2 KiB
C++
85 lines
2.2 KiB
C++
|
#pragma once
|
||
|
|
||
|
#include <matjson.hpp>
|
||
|
#include "Result.hpp"
|
||
|
#include "Promise.hpp"
|
||
|
#include <chrono>
|
||
|
|
||
|
namespace geode::utils::web {
|
||
|
class WebRequest;
|
||
|
|
||
|
class GEODE_DLL WebResponse final {
|
||
|
private:
|
||
|
class Impl;
|
||
|
|
||
|
std::shared_ptr<Impl> m_impl;
|
||
|
|
||
|
friend class WebRequest;
|
||
|
|
||
|
public:
|
||
|
// Must be default-constructible for use in Promise
|
||
|
WebResponse();
|
||
|
|
||
|
int code() const;
|
||
|
|
||
|
Result<std::string> string() const;
|
||
|
Result<matjson::Value> json() const;
|
||
|
ByteVector data() const;
|
||
|
|
||
|
std::vector<std::string> headers() const;
|
||
|
std::optional<std::string> header(std::string_view name) const;
|
||
|
};
|
||
|
|
||
|
using WebError = WebResponse;
|
||
|
|
||
|
class GEODE_DLL WebProgress final {
|
||
|
private:
|
||
|
class Impl;
|
||
|
|
||
|
std::shared_ptr<Impl> m_impl;
|
||
|
|
||
|
friend class WebRequest;
|
||
|
|
||
|
public:
|
||
|
// Must be default-constructible for use in Promise
|
||
|
WebProgress();
|
||
|
|
||
|
size_t downloaded() const;
|
||
|
size_t downloadTotal() const;
|
||
|
std::optional<float> downloadProgress() const;
|
||
|
|
||
|
size_t uploaded() const;
|
||
|
size_t uploadTotal() const;
|
||
|
std::optional<float> uploadProgress() const;
|
||
|
};
|
||
|
|
||
|
using WebPromise = Promise<WebResponse, WebError, WebProgress>;
|
||
|
|
||
|
class GEODE_DLL WebRequest final {
|
||
|
private:
|
||
|
class Impl;
|
||
|
|
||
|
std::shared_ptr<Impl> m_impl;
|
||
|
|
||
|
public:
|
||
|
WebRequest();
|
||
|
~WebRequest();
|
||
|
|
||
|
WebPromise send(std::string_view method, std::string_view url);
|
||
|
WebPromise post(std::string_view url);
|
||
|
WebPromise get(std::string_view url);
|
||
|
WebPromise put(std::string_view url);
|
||
|
WebPromise patch(std::string_view url);
|
||
|
|
||
|
WebRequest& header(std::string_view name, std::string_view value);
|
||
|
WebRequest& param(std::string_view name, std::string_view value);
|
||
|
WebRequest& userAgent(std::string_view name);
|
||
|
|
||
|
WebRequest& timeout(std::chrono::seconds time);
|
||
|
|
||
|
WebRequest& body(ByteVector raw);
|
||
|
WebRequest& bodyString(std::string_view str);
|
||
|
WebRequest& bodyJSON(matjson::Value const& json);
|
||
|
};
|
||
|
}
|