Loading...
Searching...
No Matches
NetworkRequest.h
Go to the documentation of this file.
1// Copyright (c) 2025 Dave R. Smith.
2// Malena Framework — Licensed under PolyForm Noncommercial 1.0.0; commercial use requires a paid license. See LICENSE.
3
4#ifndef MALENA_NETWORKREQUEST_H
5#define MALENA_NETWORKREQUEST_H
6
7#pragma once
8
10#include <string>
11#include <unordered_map>
12#include <nlohmann/json.hpp>
13
14namespace ml
15{
37 {
38 public:
48 explicit NetworkRequest(const std::string& url);
49
50 // ── Method ───────────────────────────────────────────────────────────
51
58 NetworkRequest& method(const std::string& m);
59
60 // ── Headers ──────────────────────────────────────────────────────────
61
67 NetworkRequest& header(const std::string& key, const std::string& value);
68
73 NetworkRequest& bearerToken(const std::string& token);
74
81 NetworkRequest& basicAuth(const std::string& user, const std::string& pass);
82
83 // ── Body ─────────────────────────────────────────────────────────────
84
92 NetworkRequest& body(const std::string& data,
93 const std::string& contentType = "application/json");
94
108 NetworkRequest& body(const nlohmann::json& json)
109 {
110 return body(json.dump(), "application/json");
111 }
112
113 // ── Options ──────────────────────────────────────────────────────────
114
119 NetworkRequest& timeout(int seconds);
120
121 // ── Accessors ────────────────────────────────────────────────────────
122
123 [[nodiscard]] const std::string& getUrl() const { return _url; }
124 [[nodiscard]] const std::string& getMethod() const { return _method; }
125 [[nodiscard]] const std::string& getBody() const { return _body; }
126 [[nodiscard]] const std::string& getContentType() const { return _contentType; }
127 [[nodiscard]] int getTimeout() const { return _timeoutSeconds; }
128
129 [[nodiscard]] const std::unordered_map<std::string, std::string>&
130 getHeaders() const { return _headers; }
131
132 private:
133 std::string _url;
134 std::string _method = "GET";
135 std::string _body;
136 std::string _contentType;
137 int _timeoutSeconds = 30;
138
139 std::unordered_map<std::string, std::string> _headers;
140 };
141
142} // namespace ml
143
144#endif // MALENA_NETWORKREQUEST_H
const std::string & getMethod() const
NetworkRequest & method(const std::string &m)
Override the HTTP method.
NetworkRequest(const std::string &url)
Construct a request for url.
NetworkRequest & body(const nlohmann::json &json)
Set the request body from a nlohmann::json value.
NetworkRequest & timeout(int seconds)
Set the request timeout in seconds. Default is 30 s.
NetworkRequest & header(const std::string &key, const std::string &value)
Add or replace a request header.
NetworkRequest & body(const std::string &data, const std::string &contentType="application/json")
Set the request body.
const std::string & getUrl() const
const std::string & getBody() const
NetworkRequest & basicAuth(const std::string &user, const std::string &pass)
Set HTTP Basic Authentication credentials.
const std::string & getContentType() const
NetworkRequest & bearerToken(const std::string &token)
Set the Authorization header to "Bearer <token>".
const std::unordered_map< std::string, std::string > & getHeaders() const
nlohmann::json json
Alias for nlohmann::json.
Definition Json.h:32
#define MALENA_API
Definition Component.h:22