// WARNING: This file is machine generated by fidlgen.

// fidl_experiment = output_index_json

#include <test/encapsulatedstructs/cpp/fidl.h>

#include "lib/fidl/cpp/internal/implementation.h"

//
// Domain objects definitions
//
namespace test {
namespace encapsulatedstructs {

extern "C" const fidl_type_t test_encapsulatedstructs_Int8Int32Table;
const fidl_type_t* Int8Int32::FidlType = &test_encapsulatedstructs_Int8Int32Table;

void Int8Int32::Encode(::fidl::Encoder* _encoder, size_t _offset,
                       cpp17::optional<::fidl::HandleInformation> maybe_handle_info) {
  if (::fidl::IsMemcpyCompatible<Int8Int32>::value) {
    memcpy(_encoder->template GetPtr<Int8Int32>(_offset), this, sizeof(Int8Int32));
  } else {
    ::fidl::Encode(_encoder, &a, _offset + 0);
    ::fidl::Encode(_encoder, &b, _offset + 4);
  }
}

void Int8Int32::Decode(::fidl::Decoder* _decoder, Int8Int32* _value, size_t _offset) {
  if (::fidl::IsMemcpyCompatible<Int8Int32>::value) {
    memcpy(_value, _decoder->template GetPtr<Int8Int32>(_offset), sizeof(Int8Int32));
  } else {
    ::fidl::Decode(_decoder, &_value->a, _offset + 0);
    ::fidl::Decode(_decoder, &_value->b, _offset + 4);
  }
}

zx_status_t Int8Int32::Clone(Int8Int32* _result) const {
  zx_status_t _status = ::fidl::Clone(a, &_result->a);
  if (_status != ZX_OK)
    return _status;
  _status = ::fidl::Clone(b, &_result->b);
  if (_status != ZX_OK)
    return _status;
  return ZX_OK;
}

extern "C" const fidl_type_t test_encapsulatedstructs_Int16Int8Table;
const fidl_type_t* Int16Int8::FidlType = &test_encapsulatedstructs_Int16Int8Table;

void Int16Int8::Encode(::fidl::Encoder* _encoder, size_t _offset,
                       cpp17::optional<::fidl::HandleInformation> maybe_handle_info) {
  if (::fidl::IsMemcpyCompatible<Int16Int8>::value) {
    memcpy(_encoder->template GetPtr<Int16Int8>(_offset), this, sizeof(Int16Int8));
  } else {
    ::fidl::Encode(_encoder, &a, _offset + 0);
    ::fidl::Encode(_encoder, &b, _offset + 2);
  }
}

void Int16Int8::Decode(::fidl::Decoder* _decoder, Int16Int8* _value, size_t _offset) {
  if (::fidl::IsMemcpyCompatible<Int16Int8>::value) {
    memcpy(_value, _decoder->template GetPtr<Int16Int8>(_offset), sizeof(Int16Int8));
  } else {
    ::fidl::Decode(_decoder, &_value->a, _offset + 0);
    ::fidl::Decode(_decoder, &_value->b, _offset + 2);
  }
}

zx_status_t Int16Int8::Clone(Int16Int8* _result) const {
  zx_status_t _status = ::fidl::Clone(a, &_result->a);
  if (_status != ZX_OK)
    return _status;
  _status = ::fidl::Clone(b, &_result->b);
  if (_status != ZX_OK)
    return _status;
  return ZX_OK;
}

extern "C" const fidl_type_t test_encapsulatedstructs_ArrayInt16Int8Table;
const fidl_type_t* ArrayInt16Int8::FidlType = &test_encapsulatedstructs_ArrayInt16Int8Table;

void ArrayInt16Int8::Encode(::fidl::Encoder* _encoder, size_t _offset,
                            cpp17::optional<::fidl::HandleInformation> maybe_handle_info) {
  if (::fidl::IsMemcpyCompatible<ArrayInt16Int8>::value) {
    memcpy(_encoder->template GetPtr<ArrayInt16Int8>(_offset), this, sizeof(ArrayInt16Int8));
  } else {
    ::fidl::Encode(_encoder, &arr, _offset + 0);
  }
}

void ArrayInt16Int8::Decode(::fidl::Decoder* _decoder, ArrayInt16Int8* _value, size_t _offset) {
  if (::fidl::IsMemcpyCompatible<ArrayInt16Int8>::value) {
    memcpy(_value, _decoder->template GetPtr<ArrayInt16Int8>(_offset), sizeof(ArrayInt16Int8));
  } else {
    ::fidl::Decode(_decoder, &_value->arr, _offset + 0);
  }
}

zx_status_t ArrayInt16Int8::Clone(ArrayInt16Int8* _result) const {
  zx_status_t _status = ::fidl::Clone(arr, &_result->arr);
  if (_status != ZX_OK)
    return _status;
  return ZX_OK;
}

extern "C" const fidl_type_t test_encapsulatedstructs_StructPaddingTestStructTable;
const fidl_type_t* StructPaddingTestStruct::FidlType = &test_encapsulatedstructs_StructPaddingTestStructTable;

void StructPaddingTestStruct::Encode(::fidl::Encoder* _encoder, size_t _offset,
                                     cpp17::optional<::fidl::HandleInformation> maybe_handle_info) {
  if (::fidl::IsMemcpyCompatible<StructPaddingTestStruct>::value) {
    memcpy(_encoder->template GetPtr<StructPaddingTestStruct>(_offset), this, sizeof(StructPaddingTestStruct));
  } else {
    ::fidl::Encode(_encoder, &trailing, _offset + 0);
    ::fidl::Encode(_encoder, &inner, _offset + 4);
    ::fidl::Encode(_encoder, &array, _offset + 12);
  }
}

void StructPaddingTestStruct::Decode(::fidl::Decoder* _decoder, StructPaddingTestStruct* _value, size_t _offset) {
  if (::fidl::IsMemcpyCompatible<StructPaddingTestStruct>::value) {
    memcpy(_value, _decoder->template GetPtr<StructPaddingTestStruct>(_offset), sizeof(StructPaddingTestStruct));
  } else {
    ::fidl::Decode(_decoder, &_value->trailing, _offset + 0);
    ::fidl::Decode(_decoder, &_value->inner, _offset + 4);
    ::fidl::Decode(_decoder, &_value->array, _offset + 12);
  }
}

zx_status_t StructPaddingTestStruct::Clone(StructPaddingTestStruct* _result) const {
  zx_status_t _status = ::fidl::Clone(trailing, &_result->trailing);
  if (_status != ZX_OK)
    return _status;
  _status = ::fidl::Clone(inner, &_result->inner);
  if (_status != ZX_OK)
    return _status;
  _status = ::fidl::Clone(array, &_result->array);
  if (_status != ZX_OK)
    return _status;
  return ZX_OK;
}

#ifdef __Fuchsia__

extern "C" const fidl_type_t test_encapsulatedstructs_NonInlineStructTestStructTable;
const fidl_type_t* NonInlineStructTestStruct::FidlType = &test_encapsulatedstructs_NonInlineStructTestStructTable;

void NonInlineStructTestStruct::Encode(::fidl::Encoder* _encoder, size_t _offset,
                                       cpp17::optional<::fidl::HandleInformation> maybe_handle_info) {
  if (::fidl::IsMemcpyCompatible<NonInlineStructTestStruct>::value) {
    memcpy(_encoder->template GetPtr<NonInlineStructTestStruct>(_offset), this, sizeof(NonInlineStructTestStruct));
  } else {
    ::fidl::Encode(_encoder, &element, _offset + 0);

    ::fidl::Encode(_encoder, &h, _offset + 8, ::fidl::HandleInformation{
                                                  .object_type = ZX_OBJ_TYPE_NONE,
                                                  .rights = 0x80000000,
                                              });
  }
}

void NonInlineStructTestStruct::Decode(::fidl::Decoder* _decoder, NonInlineStructTestStruct* _value, size_t _offset) {
  if (::fidl::IsMemcpyCompatible<NonInlineStructTestStruct>::value) {
    memcpy(_value, _decoder->template GetPtr<NonInlineStructTestStruct>(_offset), sizeof(NonInlineStructTestStruct));
  } else {
    ::fidl::Decode(_decoder, &_value->element, _offset + 0);
    ::fidl::Decode(_decoder, &_value->h, _offset + 8);
  }
}

zx_status_t NonInlineStructTestStruct::Clone(NonInlineStructTestStruct* _result) const {
  zx_status_t _status = ::fidl::Clone(element, &_result->element);
  if (_status != ZX_OK)
    return _status;
  _status = ::fidl::Clone(h, &_result->h);
  if (_status != ZX_OK)
    return _status;
  return ZX_OK;
}

#endif  // __Fuchsia__

#ifdef __Fuchsia__

extern "C" const fidl_type_t test_encapsulatedstructs_TopLevelStructTable;
const fidl_type_t* TopLevelStruct::FidlType = &test_encapsulatedstructs_TopLevelStructTable;

void TopLevelStruct::Encode(::fidl::Encoder* _encoder, size_t _offset,
                            cpp17::optional<::fidl::HandleInformation> maybe_handle_info) {
  if (::fidl::IsMemcpyCompatible<TopLevelStruct>::value) {
    memcpy(_encoder->template GetPtr<TopLevelStruct>(_offset), this, sizeof(TopLevelStruct));
  } else {
    ::fidl::Encode(_encoder, &a, _offset + 0);
    ::fidl::Encode(_encoder, &b, _offset + 24);
  }
}

void TopLevelStruct::Decode(::fidl::Decoder* _decoder, TopLevelStruct* _value, size_t _offset) {
  if (::fidl::IsMemcpyCompatible<TopLevelStruct>::value) {
    memcpy(_value, _decoder->template GetPtr<TopLevelStruct>(_offset), sizeof(TopLevelStruct));
  } else {
    ::fidl::Decode(_decoder, &_value->a, _offset + 0);
    ::fidl::Decode(_decoder, &_value->b, _offset + 24);
  }
}

zx_status_t TopLevelStruct::Clone(TopLevelStruct* _result) const {
  zx_status_t _status = ::fidl::Clone(a, &_result->a);
  if (_status != ZX_OK)
    return _status;
  _status = ::fidl::Clone(b, &_result->b);
  if (_status != ZX_OK)
    return _status;
  return ZX_OK;
}

#endif  // __Fuchsia__

//
// Proxies and stubs definitions
//
}  // namespace encapsulatedstructs
}  // namespace test
