{{>licenseInfo}}
{{#operations}}/*
 * {{classname}}.h
 *
 * {{description}}
 */

#ifndef {{apiHeaderGuardPrefix}}_{{classname}}_H_
#define {{apiHeaderGuardPrefix}}_{{classname}}_H_

{{{defaultInclude}}}
#include "../ApiClient.h"

{{#imports}}{{{import}}}
{{/imports}}

#include <boost/optional.hpp>

{{#apiNamespaceDeclarations}}
namespace {{this}} {
{{/apiNamespaceDeclarations}}

using namespace {{modelNamespace}};

class {{declspec}} {{classname}}
{
public:
    {{classname}}( std::shared_ptr<ApiClient> apiClient );
    virtual ~{{classname}}();
    {{#operation}}
    /// <summary>
    /// {{summary}}
    /// </summary>
    /// <remarks>
    /// {{notes}}
    /// </remarks>
    {{#allParams}}
    /// <param name="{{paramName}}">{{description}}{{^required}} (optional{{#defaultValue}}, default to {{.}}{{/defaultValue}}){{/required}}</param>
    {{/allParams}}
    pplx::task<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}> {{operationId}}(
        {{#allParams}}
        {{^required}}boost::optional<{{/required}}{{{dataType}}}{{^required}}>{{/required}} {{paramName}}{{#hasMore}},{{/hasMore}}
        {{/allParams}}
    );
    {{/operation}}

protected:
    std::shared_ptr<ApiClient> m_ApiClient;
};

{{#apiNamespaceDeclarations}}
}
{{/apiNamespaceDeclarations}}

#endif /* {{apiHeaderGuardPrefix}}_{{classname}}_H_ */

{{/operations}}
