text: /*
   * Copyright 2009-2017 Alibaba Cloud All rights reserved.
   * 
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   * 
   *      http://www.apache.org/licenses/LICENSE-2.0
   * 
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  #ifndef ALIBABACLOUD_OPENANALYTICS_OPENANALYTICSCLIENT_H_
  #define ALIBABACLOUD_OPENANALYTICS_OPENANALYTICSCLIENT_H_
  
  #include <future>
  #include <alibabacloud/core/AsyncCallerContext.h>
  #include <alibabacloud/core/EndpointProvider.h>
  #include <alibabacloud/core/RpcServiceClient.h>
  #include "OpenanalyticsExport.h"
  #include "model/SetAllowIPRequest.h"
  #include "model/SetAllowIPResult.h"
  #include "model/GetRegionStatusRequest.h"
  #include "model/GetRegionStatusResult.h"
  #include "model/DescribeRegionListRequest.h"
  #include "model/DescribeRegionListResult.h"
  #include "model/OpenProductAccountRequest.h"
  #include "model/OpenProductAccountResult.h"
  #include "model/CloseProductAccountRequest.h"
  #include "model/CloseProductAccountResult.h"
  #include "model/GetEndPointByDomainRequest.h"
  #include "model/GetEndPointByDomainResult.h"
  #include "model/GetAllowIPRequest.h"
  #include "model/GetAllowIPResult.h"
  #include "model/GetProductStatusRequest.h"
  #include "model/GetProductStatusResult.h"
  #include "model/QueryEndPointListRequest.h"
  #include "model/QueryEndPointListResult.h"
  
  
  namespace AlibabaCloud
  {
  	namespace Openanalytics
  	{
  		class ALIBABACLOUD_OPENANALYTICS_EXPORT OpenanalyticsClient : public RpcServiceClient
  		{
  		public:
  			typedef Outcome<Error, Model::SetAllowIPResult> SetAllowIPOutcome;
  			typedef std::future<SetAllowIPOutcome> SetAllowIPOutcomeCallable;
  			typedef std::function<void(const OpenanalyticsClient*, const Model::SetAllowIPRequest&, const SetAllowIPOutcome&, const std::shared_ptr<const AsyncCallerContext>&)> SetAllowIPAsyncHandler;
  			typedef Outcome<Error, Model::GetRegionStatusResult> GetRegionStatusOutcome;
  			typedef std::future<GetRegionStatusOutcome> GetRegionStatusOutcomeCallable;
  			typedef std::function<void(const OpenanalyticsClient*, const Model::GetRegionStatusRequest&, const GetRegionStatusOutcome&, const std::shared_ptr<const AsyncCallerContext>&)> GetRegionStatusAsyncHandler;
  			typedef Outcome<Error, Model::DescribeRegionListResult> DescribeRegionListOutcome;
  			typedef std::future<DescribeRegionListOutcome> DescribeRegionListOutcomeCallable;
  			typedef std::function<void(const OpenanalyticsClient*, const Model::DescribeRegionListRequest&, const DescribeRegionListOutcome&, const std::shared_ptr<const AsyncCallerContext>&)> DescribeRegionListAsyncHandler;
  			typedef Outcome<Error, Model::OpenProductAccountResult> OpenProductAccountOutcome;
  			typedef std::future<OpenProductAccountOutcome> OpenProductAccountOutcomeCallable;
  			typedef std::function<void(const OpenanalyticsClient*, const Model::OpenProductAccountRequest&, const OpenProductAccountOutcome&, const std::shared_ptr<const AsyncCallerContext>&)> OpenProductAccountAsyncHandler;
  			typedef Outcome<Error, Model::CloseProductAccountResult> CloseProductAccountOutcome;
  			typedef std::future<CloseProductAccountOutcome> CloseProductAccountOutcomeCallable;
  			typedef std::function<void(const OpenanalyticsClient*, const Model::CloseProductAccountRequest&, const CloseProductAccountOutcome&, const std::shared_ptr<const AsyncCallerContext>&)> CloseProductAccountAsyncHandler;
  			typedef Outcome<Error, Model::GetEndPointByDomainResult> GetEndPointByDomainOutcome;
  			typedef std::future<GetEndPointByDomainOutcome> GetEndPointByDomainOutcomeCallable;
  			typedef std::function<void(const OpenanalyticsClient*, const Model::GetEndPointByDomainRequest&, const GetEndPointByDomainOutcome&, const std::shared_ptr<const AsyncCallerContext>&)> GetEndPointByDomainAsyncHandler;
  			typedef Outcome<Error, Model::GetAllowIPResult> GetAllowIPOutcome;
  			typedef std::future<GetAllowIPOutcome> GetAllowIPOutcomeCallable;
  			typedef std::function<void(const OpenanalyticsClient*, const Model::GetAllowIPRequest&, const GetAllowIPOutcome&, const std::shared_ptr<const AsyncCallerContext>&)> GetAllowIPAsyncHandler;
  			typedef Outcome<Error, Model::GetProductStatusResult> GetProductStatusOutcome;
  			typedef std::future<GetProductStatusOutcome> GetProductStatusOutcomeCallable;
  			typedef std::function<void(const OpenanalyticsClient*, const Model::GetProductStatusRequest&, const GetProductStatusOutcome&, const std::shared_ptr<const AsyncCallerContext>&)> GetProductStatusAsyncHandler;
  			typedef Outcome<Error, Model::QueryEndPointListResult> QueryEndPointListOutcome;
  			typedef std::future<QueryEndPointListOutcome> QueryEndPointListOutcomeCallable;
  			typedef std::function<void(const OpenanalyticsClient*, const Model::QueryEndPointListRequest&, const QueryEndPointListOutcome&, const std::shared_ptr<const AsyncCallerContext>&)> QueryEndPointListAsyncHandler;
  
  			OpenanalyticsClient(const Credentials &credentials, const ClientConfiguration &configuration);
  			OpenanalyticsClient(const std::shared_ptr<CredentialsProvider> &credentialsProvider, const ClientConfiguration &configuration);
  			OpenanalyticsClient(const std::string &accessKeyId, const std::string &accessKeySecret, const ClientConfiguration &configuration);
  			~OpenanalyticsClient();
  			SetAllowIPOutcome setAllowIP(const Model::SetAllowIPRequest &request)const;
  			void setAllowIPAsync(const Model::SetAllowIPRequest& request, const SetAllowIPAsyncHandler& handler, const std::shared_ptr<const AsyncCallerContext>& context = nullptr) const;
  			SetAllowIPOutcomeCallable setAllowIPCallable(const Model::SetAllowIPRequest& request) const;
  			GetRegionStatusOutcome getRegionStatus(const Model::GetRegionStatusRequest &request)const;
  			void getRegionStatusAsync(const Model::GetRegionStatusRequest& request, const GetRegionStatusAsyncHandler& handler, const std::shared_ptr<const AsyncCallerContext>& context = nullptr) const;
  			GetRegionStatusOutcomeCallable getRegionStatusCallable(const Model::GetRegionStatusRequest& request) const;
  			DescribeRegionListOutcome describeRegionList(const Model::DescribeRegionListRequest &request)const;
  			void describeRegionListAsync(const Model::DescribeRegionListRequest& request, const DescribeRegionListAsyncHandler& handler, const std::shared_ptr<const AsyncCallerContext>& context = nullptr) const;
  			DescribeRegionListOutcomeCallable describeRegionListCallable(const Model::DescribeRegionListRequest& request) const;
  			OpenProductAccountOutcome openProductAccount(const Model::OpenProductAccountRequest &request)const;
  			void openProductAccountAsync(const Model::OpenProductAccountRequest& request, const OpenProductAccountAsyncHandler& handler, const std::shared_ptr<const AsyncCallerContext>& context = nullptr) const;
  			OpenProductAccountOutcomeCallable openProductAccountCallable(const Model::OpenProductAccountRequest& request) const;
  			CloseProductAccountOutcome closeProductAccount(const Model::CloseProductAccountRequest &request)const;
  			void closeProductAccountAsync(const Model::CloseProductAccountRequest& request, const CloseProductAccountAsyncHandler& handler, const std::shared_ptr<const AsyncCallerContext>& context = nullptr) const;
  			CloseProductAccountOutcomeCallable closeProductAccountCallable(const Model::CloseProductAccountRequest& request) const;
  			GetEndPointByDomainOutcome getEndPointByDomain(const Model::GetEndPointByDomainRequest &request)const;
  			void getEndPointByDomainAsync(const Model::GetEndPointByDomainRequest& request, const GetEndPointByDomainAsyncHandler& handler, const std::shared_ptr<const AsyncCallerContext>& context = nullptr) const;
  			GetEndPointByDomainOutcomeCallable getEndPointByDomainCallable(const Model::GetEndPointByDomainRequest& request) const;
  			GetAllowIPOutcome getAllowIP(const Model::GetAllowIPRequest &request)const;
  			void getAllowIPAsync(const Model::GetAllowIPRequest& request, const GetAllowIPAsyncHandler& handler, const std::shared_ptr<const AsyncCallerContext>& context = nullptr) const;
  			GetAllowIPOutcomeCallable getAllowIPCallable(const Model::GetAllowIPRequest& request) const;
  			GetProductStatusOutcome getProductStatus(const Model::GetProductStatusRequest &request)const;
  			void getProductStatusAsync(const Model::GetProductStatusRequest& request, const GetProductStatusAsyncHandler& handler, const std::shared_ptr<const AsyncCallerContext>& context = nullptr) const;
  			GetProductStatusOutcomeCallable getProductStatusCallable(const Model::GetProductStatusRequest& request) const;
  			QueryEndPointListOutcome queryEndPointList(const Model::QueryEndPointListRequest &request)const;
  			void queryEndPointListAsync(const Model::QueryEndPointListRequest& request, const QueryEndPointListAsyncHandler& handler, const std::shared_ptr<const AsyncCallerContext>& context = nullptr) const;
  			QueryEndPointListOutcomeCallable queryEndPointListCallable(const Model::QueryEndPointListRequest& request) const;
  	
  		private:
  			std::shared_ptr<EndpointProvider> endpointProvider_;
  		};
  	}
  }
  
  #endif // !ALIBABACLOUD_OPENANALYTICS_OPENANALYTICSCLIENT_H_
  