1 /*
2  * Copyright 1999-2019 Alibaba Cloud All rights reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef CORE_INCLUDE_ALIBABACLOUD_CORE_COMMONREQUEST_H_
18 #define CORE_INCLUDE_ALIBABACLOUD_CORE_COMMONREQUEST_H_
19 
20 #include "CoreExport.h"
21 #include "HttpRequest.h"
22 #include "ServiceRequest.h"
23 #include <string>
24 
25 namespace AlibabaCloud {
26 class ALIBABACLOUD_CORE_EXPORT CommonRequest : public ServiceRequest {
27 public:
28   enum RequestPattern { RpcPattern, RoaPattern };
29 
30   explicit CommonRequest(RequestPattern pattern = RpcPattern);
31   ~CommonRequest();
32 
33   std::string domain() const;
34   ParameterValueType headerParameter(const ParameterNameType &name) const;
35   ParameterCollection headerParameters() const;
36   HttpRequest::Method httpMethod() const;
37   ParameterValueType queryParameter(const ParameterNameType &name) const;
38   ParameterCollection queryParameters() const;
39   using ServiceRequest::setContent;
40   void setDomain(const std::string &domain);
41   void setHeaderParameter(const ParameterNameType &name,
42                           const ParameterValueType &value);
43   void setHttpMethod(HttpRequest::Method method);
44   void setQueryParameter(const ParameterNameType &name,
45                          const ParameterValueType &value);
46   using ServiceRequest::setResourcePath;
47   void setRequestPattern(RequestPattern pattern);
48   using ServiceRequest::setScheme;
49   using ServiceRequest::setVersion;
50   RequestPattern requestPattern() const;
51 
52 protected:
53   using ServiceRequest::product;
54 
55 private:
56   std::string domain_;
57   RequestPattern requestPattern_;
58   ParameterCollection queryParams_;
59   ParameterCollection headerParams_;
60   HttpRequest::Method httpMethod_;
61 };
62 } // namespace AlibabaCloud
63 #endif // CORE_INCLUDE_ALIBABACLOUD_CORE_COMMONREQUEST_H_
64