1212#include < deque>
1313#include < functional>
1414#include < list>
15+ #include < optional>
1516#include < unordered_map>
1617#include < vector>
1718
@@ -136,9 +137,15 @@ class AsyncWebHeader {
136137
137138public:
138139 AsyncWebHeader (const AsyncWebHeader &) = default ;
140+ AsyncWebHeader (AsyncWebHeader &&) = default ;
139141 AsyncWebHeader (const char *name, const char *value) : _name(name), _value(value) {}
140142 AsyncWebHeader (const String &name, const String &value) : _name(name), _value(value) {}
141- AsyncWebHeader (const String &data);
143+
144+ #ifndef ESP8266
145+ [[deprecated("Use AsyncWebHeader::parse(data) instead")]]
146+ #endif
147+ AsyncWebHeader (const String &data)
148+ : AsyncWebHeader(parse(data).value_or(AsyncWebHeader(emptyString, emptyString))){};
142149
143150 AsyncWebHeader &operator =(const AsyncWebHeader &) = default ;
144151
@@ -148,7 +155,13 @@ class AsyncWebHeader {
148155 const String &value () const {
149156 return _value;
150157 }
158+
151159 String toString () const ;
160+
161+ static std::optional<AsyncWebHeader> parse (const String &data) {
162+ return parse (data.c_str ());
163+ }
164+ static std::optional<AsyncWebHeader> parse (const char *data);
152165};
153166
154167/*
@@ -1038,6 +1051,10 @@ class AsyncWebServerResponse {
10381051 setContentType (type.c_str ());
10391052 }
10401053 void setContentType (const char *type);
1054+ bool addHeader (AsyncWebHeader &&header, bool replaceExisting = true );
1055+ bool addHeader (const AsyncWebHeader &header, bool replaceExisting = true ) {
1056+ return addHeader (header.name (), header.value (), replaceExisting);
1057+ }
10411058 bool addHeader (const char *name, const char *value, bool replaceExisting = true );
10421059 bool addHeader (const String &name, const String &value, bool replaceExisting = true ) {
10431060 return addHeader (name.c_str (), value.c_str (), replaceExisting);
0 commit comments