Malloy
Loading...
Searching...
No Matches
form.hpp
1#pragma once
2
3#include "form_data.hpp"
4#include "form_field.hpp"
5#include "../http/request.hpp"
6
7#include <optional>
8#include <string>
9#include <vector>
10
11namespace malloy::html
12{
13
22 class form
23 {
24 public:
28 enum class encoding
29 {
30 url,
31 multipart,
32 plain,
33 };
34
42 form(
44 std::string action,
45 encoding enc
46 );
47
51 virtual
52 ~form() = default;
53
59 [[nodiscard]]
61 method() const noexcept
62 {
63 return m_method;
64 }
65
71 [[nodiscard]]
72 std::string_view
73 action() const noexcept
74 {
75 return m_action;
76 }
77
83 [[nodiscard]]
85 get_encoding() const noexcept
86 {
87 return m_encoding;
88 }
89
95 [[nodiscard]]
96 static
97 std::string_view
99
105 [[nodiscard]]
106 std::string_view
108 {
109 return encoding_to_string(m_encoding);
110 }
111
119 [[nodiscard]]
120 static
121 std::optional<encoding>
122 encoding_from_string(std::string_view str);
123
129 [[nodiscard]]
130 std::vector<form_field>
131 fields() const noexcept
132 {
133 return m_fields;
134 }
135
145 bool
146 add_field(form_field&& field);
147
154 bool
155 has_field(std::string_view field_name) const;
156
169 void
170 populate(const form_data& data);
171
175 void
176 clear_values();
177
186 // ToDo: Move this outside of this class
187 [[nodiscard]]
188 static
189 std::optional<form_data>
190 parse(const malloy::http::request<>& req);
191
192 private:
193 http::method m_method;
194 std::string m_action;
195 encoding m_encoding;
196 std::vector<form_field> m_fields;
197
204 [[nodiscard]]
206 field_from_name(std::string_view field_name);
207
214 [[nodiscard]]
215 const form_field&
216 field_from_name(std::string_view field_name) const;
217
218 [[nodiscard]]
219 static
220 std::optional<form_data>
221 parse_urlencoded(const malloy::http::request<>& req);
222
223 [[nodiscard]]
224 static
225 std::optional<form_data>
226 parse_multipart(const malloy::http::request<>& req);
227
228 [[nodiscard]]
229 static
230 std::optional<form_data>
231 parse_plain(const malloy::http::request<>& req);
232 };
233
234}
Definition: form_data.hpp:19
Definition: form.hpp:23
http::method method() const noexcept
Definition: form.hpp:61
void clear_values()
Definition: form.cpp:135
virtual ~form()=default
std::string_view action() const noexcept
Definition: form.hpp:73
std::string_view encoding_to_string() const
Definition: form.hpp:107
std::vector< form_field > fields() const noexcept
Definition: form.hpp:131
encoding get_encoding() const noexcept
Definition: form.hpp:85
bool has_field(std::string_view field_name) const
Definition: form.cpp:107
static std::optional< encoding > encoding_from_string(std::string_view str)
Definition: form.cpp:72
bool add_field(form_field &&field)
Definition: form.cpp:91
void populate(const form_data &data)
Definition: form.cpp:121
encoding
Definition: form.hpp:29
static std::optional< form_data > parse(const malloy::http::request<> &req)
Definition: form.cpp:142
Definition: request.hpp:19
Definition: form.hpp:12
boost::beast::http::verb method
Definition: types.hpp:18
Definition: form_field.hpp:31