#ifndef ProtoGenWrapper_DParameterContainer_H
#define ProtoGenWrapper_DParameterContainer_H

#include <memory>

#include "DRequest.h"
#include "DResponse.h"

namespace ProtoGenWrapper
{
	class DParameterContainer // ParameterOwner @@@
	{
	public:
		DParameterContainer() = default;
		DParameterContainer(const DParameterContainer& other);
		virtual ~DParameterContainer() = default;

		DParameterContainer& operator=(const DParameterContainer& other);

		enum ContainerType { ctUnknown, ctRequest, ctResponse, ctParameter };
		ContainerType GetType() const;
		
		DRequest& GetRequest() const;
		DResponse& GetResponse() const;
		DParameter& GetParameter() const;
	
		void SetRequest(const DRequest &request);
		void SetResponse(const DResponse &response);
		void SetParameter(const DParameter &parameter);
		
	protected:
		std::unique_ptr<DRequest> _request;
		std::unique_ptr<DResponse> _response;
		std::unique_ptr<DParameter> _parameter;
		ContainerType _type = ctUnknown;
	};
}

#endif // ProtobufWrapper_DParameterContainer_H