// <auto-generated>
// This file was generated by BoltFFI. Do not edit.
// </auto-generated>

using System;
{%- if record.is_blittable %}
using System.Runtime.InteropServices;
{%- endif %}
{%- if record.has_string_fields() %}
using System.Text;
{%- endif %}

namespace {{ namespace }}
{
{%- if record.is_blittable %}
    [StructLayout(LayoutKind.Sequential)]
{%- endif %}
    public readonly record struct {{ record.class_name }}(
{%- for field in record.fields %}
        {{ field.csharp_type }} {{ field.name }}{% if !loop.last %},{% endif %}
{%- endfor %}
    )
    {
        internal static {{ record.class_name }} Decode(WireReader reader) =>
            new {{ record.class_name }}(
{%- for field in record.fields %}
                {{ field.wire_decode_expr }}{% if !loop.last %},{% endif %}
{%- endfor %}
            );

        internal int WireEncodedSize() =>
{%- if record.is_empty() %}
            0;
{%- else %}
{%- for field in record.fields %}
            {{ field.wire_size_expr }}{% if !loop.last %} +{% else %};{% endif %}
{%- endfor %}
{%- endif %}

        internal void WireEncodeTo(WireWriter wire)
        {
{%- for field in record.fields %}
            {{ field.wire_encode_expr }};
{%- endfor %}
        }
    }
}
