From 2e51afedbe67a1c746c1965e3e93d9c8aaacb555 Mon Sep 17 00:00:00 2001
From: Dirk Mueller <dirk@dmllr.de>
Date: Sat, 29 Aug 2020 02:33:40 +0200
Subject: [PATCH] Avoid #includes with a surrounding namespace

This is a followup of the discussion in
https://github.com/esp8266/Arduino/pull/6946#discussion_r361582525

to untangle the namespace/double inclusions in this library.
---
 libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h    | 4 ++++
 libraries/ESP8266WebServer/src/ESP8266WebServer.h         | 8 +++++---
 libraries/ESP8266WebServer/src/Parsing-impl.h             | 4 ++++
 libraries/ESP8266WebServer/src/detail/RequestHandler.h    | 4 ++++
 .../ESP8266WebServer/src/detail/RequestHandlersImpl.h     | 4 +++-
 5 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h b/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h
index a686c43468..bc094b1b6e 100644
--- a/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h
+++ b/libraries/ESP8266WebServer/src/ESP8266WebServer-impl.h
@@ -34,6 +34,8 @@ static const char qop_auth_quoted[] PROGMEM = "qop=\"auth\"";
 static const char WWW_Authenticate[] PROGMEM = "WWW-Authenticate";
 static const char Content_Length[] PROGMEM = "Content-Length";
 
+namespace esp8266webserver {
+
 template <typename ServerType>
 ESP8266WebServerTemplate<ServerType>::ESP8266WebServerTemplate(IPAddress addr, int port)
 : _server(addr, port)
@@ -864,3 +866,5 @@ String ESP8266WebServerTemplate<ServerType>::responseCodeToString(const int code
     }
     return String(r);
 }
+
+} // namespace
diff --git a/libraries/ESP8266WebServer/src/ESP8266WebServer.h b/libraries/ESP8266WebServer/src/ESP8266WebServer.h
index 3d1a478d26..3c08f72a32 100644
--- a/libraries/ESP8266WebServer/src/ESP8266WebServer.h
+++ b/libraries/ESP8266WebServer/src/ESP8266WebServer.h
@@ -82,8 +82,12 @@ namespace esp8266webserver {
 template<typename ServerType>
 class ESP8266WebServerTemplate;
 
+}
+
 #include "detail/RequestHandler.h"
 
+namespace esp8266webserver {
+
 template<typename ServerType>
 class ESP8266WebServerTemplate
 {
@@ -296,13 +300,11 @@ class ESP8266WebServerTemplate
   HookFunction     _hook;
 };
 
+} // namespace
 
 #include "ESP8266WebServer-impl.h"
 #include "Parsing-impl.h"
 
-};
-
-
 using ESP8266WebServer = esp8266webserver::ESP8266WebServerTemplate<WiFiServer>;
 using RequestHandler = esp8266webserver::RequestHandler<WiFiServer>;
 
diff --git a/libraries/ESP8266WebServer/src/Parsing-impl.h b/libraries/ESP8266WebServer/src/Parsing-impl.h
index 4bb6db8878..4f7068c0c6 100644
--- a/libraries/ESP8266WebServer/src/Parsing-impl.h
+++ b/libraries/ESP8266WebServer/src/Parsing-impl.h
@@ -32,6 +32,8 @@
 static const char Content_Type[] PROGMEM = "Content-Type";
 static const char filename[] PROGMEM = "filename";
 
+namespace esp8266webserver {
+
 template <typename ServerType>
 static bool readBytesWithTimeout(typename ServerType::ClientType& client, size_t maxLength, String& data, int timeout_ms)
 {
@@ -578,3 +580,5 @@ bool ESP8266WebServerTemplate<ServerType>::_parseFormUploadAborted(){
     _currentHandler->upload(*this, _currentUri, *_currentUpload);
   return false;
 }
+
+} // namespace
diff --git a/libraries/ESP8266WebServer/src/detail/RequestHandler.h b/libraries/ESP8266WebServer/src/detail/RequestHandler.h
index 174040a77f..4195f0ff3f 100644
--- a/libraries/ESP8266WebServer/src/detail/RequestHandler.h
+++ b/libraries/ESP8266WebServer/src/detail/RequestHandler.h
@@ -5,6 +5,8 @@
 #include <vector>
 #include <assert.h>
 
+namespace esp8266webserver {
+
 template<typename ServerType>
 class RequestHandler {
     using WebServerType = ESP8266WebServerTemplate<ServerType>;
@@ -31,4 +33,6 @@ class RequestHandler {
     }
 };
 
+} // namespace
+
 #endif //REQUESTHANDLER_H
diff --git a/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h b/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h
index bb626abbd8..dd3abe8ab5 100644
--- a/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h
+++ b/libraries/ESP8266WebServer/src/detail/RequestHandlersImpl.h
@@ -7,7 +7,7 @@
 #include "WString.h"
 #include "Uri.h"
 
-using namespace mime;
+namespace esp8266webserver {
 
 template<typename ServerType>
 class FunctionRequestHandler : public RequestHandler<ServerType> {
@@ -126,6 +126,7 @@ class StaticRequestHandler : public RequestHandler<ServerType> {
 
         String contentType = mime::getContentType(path);
 
+        using namespace mime;
         // look for gz file, only if the original specified path is not a gz.  So part only works to send gzip via content encoding when a non compressed is asked for
         // if you point the the path to gzip you will serve the gzip as content type "application/x-gzip", not text or javascript etc...
         if (!path.endsWith(FPSTR(mimeTable[gz].endsWith)) && !_fs.exists(path))  {
@@ -164,5 +165,6 @@ class StaticRequestHandler : public RequestHandler<ServerType> {
     size_t _baseUriLength;
 };
 
+} // namespace
 
 #endif //REQUESTHANDLERSIMPL_H