text: /**
   * Port Drayage Web Service.
   * Web Service for Loading/Unloading/Inspection interactions for Port Drayage Operations.
   *
   * The version of the OpenAPI document: 1.0
   *
   * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
   * https://openapi-generator.tech
   * Do not edit the class manually.
   */
  
  /**
   * Based on http://www.creativepulse.gr/en/blog/2014/restful-api-requests-using-qt-cpp-for-linux-mac-osx-ms-windows
   * By Alex Stylianos
   *
   **/
  
  #ifndef OAI_HTTPREQUESTWORKER_H
  #define OAI_HTTPREQUESTWORKER_H
  
  #include <QMap>
  #include <QNetworkAccessManager>
  #include <QNetworkReply>
  #include <QObject>
  #include <QString>
  #include <QTimer>
  #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
      #include <QRandomGenerator>
  #endif
  
  #include "OAIHttpFileElement.h"
  
  namespace OpenAPI {
  
  enum OAIHttpRequestVarLayout {
      NOT_SET,
      ADDRESS,
      URL_ENCODED,
      MULTIPART
  };
  
  class OAIHttpRequestInput {
  
  public:
      QString url_str;
      QString http_method;
      OAIHttpRequestVarLayout var_layout;
      QMap<QString, QString> vars;
      QMap<QString, QString> headers;
      QList<OAIHttpFileElement> files;
      QByteArray request_body;
  
      OAIHttpRequestInput();
      OAIHttpRequestInput(QString v_url_str, QString v_http_method);
      void initialize();
      void add_var(QString key, QString value);
      void add_file(QString variable_name, QString local_filename, QString request_filename, QString mime_type);
  };
  
  class OAIHttpRequestWorker : public QObject {
      Q_OBJECT
  
  public:
      explicit OAIHttpRequestWorker(QObject *parent = nullptr, QNetworkAccessManager *manager = nullptr);
      virtual ~OAIHttpRequestWorker();
  
      QByteArray response;
      QNetworkReply::NetworkError error_type;
      QString error_str;
  
      QMap<QString, QString> getResponseHeaders() const;
      QString http_attribute_encode(QString attribute_name, QString input);
      void execute(OAIHttpRequestInput *input);
      static QSslConfiguration *sslDefaultConfiguration;
      void setTimeOut(int timeOutMs);
      void setWorkingDirectory(const QString &path);
      OAIHttpFileElement getHttpFileElement(const QString &fieldname = QString());
      QByteArray *getMultiPartField(const QString &fieldname = QString());
      void setResponseCompressionEnabled(bool enable);
      void setRequestCompressionEnabled(bool enable);
      int  getHttpResponseCode() const;
  
  signals:
      void on_execution_finished(OAIHttpRequestWorker *worker);
  
  private:
      enum OAICompressionType{
          Zlib,
          Gzip
      };
      QNetworkAccessManager *manager;
      QMap<QString, QString> headers;
      QMap<QString, OAIHttpFileElement> files;
      QMap<QString, QByteArray *> multiPartFields;
      QString workingDirectory;
      QTimer timeOutTimer;
      bool isResponseCompressionEnabled;
      bool isRequestCompressionEnabled;
      int  httpResponseCode;
  #if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
      QRandomGenerator randomGenerator;
  #endif
  
      void on_reply_timeout(QNetworkReply *reply);
      void on_reply_finished(QNetworkReply *reply);
      void process_response(QNetworkReply *reply);
      QByteArray decompress(const QByteArray& data);
      QByteArray compress(const QByteArray& input, int level, OAICompressionType compressType);
  };
  
  } // namespace OpenAPI
  
  #endif // OAI_HTTPREQUESTWORKER_H
  