{% macro parse(field) -%}
{%- import "parse.java" as _self -%}
{{ field.java_name }} = {{ _self.parse_raw(field) -}}
{%- endmacro %}
{% macro parse_raw(field) -%}
{%- import "parse.java" as _self -%}
{{- _self.types[field.__class__.__name__](field) -}}
{%- endmacro %}
{% macro common(field) -%}
buffer.get{{ field.java_type.capitalize() }}();
{%- endmacro %}
{% macro byte(field) -%}
buffer.get();
{%- endmacro %}
{% macro boolean(field) -%}
getBoolean(buffer);
{%- endmacro %}
{% macro string(field) -%}
getString(buffer);
{%- endmacro %}
{% macro message(field) -%}
getMessage(buffer);
{%- endmacro %}
{% macro queue(field) -%}
getQueue(buffer);
{%- endmacro %}
{% macro error(field) -%}
ErrorType.values()[buffer.get()];
{%- endmacro %}
{% macro list(field) -%}
{%- import "parse.java" as _self -%}
new {{ field._field.java_type }}[buffer.getInt()];
for (int i = 0; i < {{ field.java_name }}.length; i++) {
{{ field.java_name }}[i] = {{ _self.parse_raw(field._field) }}
}
{%- endmacro %}
{% set types = {
'Bool': boolean,
'Byte': byte,
'Short': common,
'Int': common,
'Long': common,
'Float': common,
'Double': common,
'String': string,
'TelestoMessage': message,
'TelestoQueue': queue,
'TelestoErrorType': error,
'List': list
} %}