/*
DO NOT MODIFY THIS FILE.  It is automatically generated and changes will be over-written
on the next generation.

It contains enumerations used by the {{stinger.name}} interface.

LICENSE: This generated code is not subject to any license restrictions from the generator itself.
TODO: Get license text from stinger file
*/


#pragma once
#include <string>
#include <chrono>
#include <vector>
#include "{{stinger.cpp.enum_header_file}}"
#include "structs.hpp"

{%for ns in config.cpp.namespace%}
namespace {{ns}} {
{%endfor-%}
namespace {{stinger.name|snake_case}} {

{%for method_name, method in stinger.methods.items()%}

struct {{method_name | UpperCamelCase}}RequestArguments {
    void AddToRapidJsonObject(rapidjson::Value& parent, rapidjson::Document::AllocatorType& allocator) const;
    static {{method_name | UpperCamelCase}}RequestArguments FromRapidJsonObject(const rapidjson::Value& jsonObj);
    {%-if method.arg_list | length > 0 %}
    // Values...
    {%-for arg in method.arg_list %}
    {{arg.cpp_temp_type}} {{arg.name|lowerCamelCase}};
    {%-endfor%}
    {%endif%}
};

struct {{method_name | UpperCamelCase}}ReturnValues {
    void AddToRapidJsonObject(rapidjson::Value& parent, rapidjson::Document::AllocatorType& allocator) const;
    static {{method_name | UpperCamelCase}}ReturnValues FromRapidJsonObject(const rapidjson::Value& jsonObj);
    {%-if method.return_arg_list | length > 0 %}
    // Values...
    {%-for arg in method.return_arg_list %}
    {{arg.cpp_temp_type}} {{arg.name|lowerCamelCase}};
    {%-endfor%}
    {%endif%}
};
{%-endfor%}

} // namespace {{stinger.name|snake_case}}
{%for ns in config.cpp.namespace|reverse%}
} // namespace {{ns}}
{%endfor-%}