Program Listing for File serialization_support_interface.h

Return to documentation for file (/tmp/ws/src/rosidl_dynamic_typesupport/include/rosidl_dynamic_typesupport/api/serialization_support_interface.h)

// Copyright 2022 Open Source Robotics Foundation, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.


#ifndef ROSIDL_DYNAMIC_TYPESUPPORT__API__SERIALIZATION_SUPPORT_INTERFACE_H_
#define ROSIDL_DYNAMIC_TYPESUPPORT__API__SERIALIZATION_SUPPORT_INTERFACE_H_

#ifdef __cplusplus
extern "C" {
#endif

#include <stddef.h>
#include <stdint.h>

#include <rcutils/allocator.h>
#include <rcutils/types/rcutils_ret.h>
#include <rcutils/types/uint8_array.h>
#include <rosidl_runtime_c/type_description/type_description__struct.h>

#include "rosidl_dynamic_typesupport/types.h"
#include "rosidl_dynamic_typesupport/uchar.h"


// =================================================================================================
// Interface
// =================================================================================================
struct rosidl_dynamic_typesupport_serialization_support_interface_s
{

  /* TODOS??? (though these are just bonuses...)
   *   - DynamicType::get_type_descriptor / DynamicType::get_descriptor (and TypeDescriptor class)
   *
   * I'm not sure if these are necessary, given the fact we will have the type description message
   * to guide the traversal? Also it's ambiguous what type we should be returning...:
   *   - DynamicType::get_all_members (Returns map of member ID to member)
   *   - DynamicType::get_all_members_by_name (Returns map of member name to member)
   */

  // CORE
  rcutils_allocator_t allocator;
  const char * serialization_library_identifier;

  rcutils_ret_t (* serialization_support_impl_fini)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * impl);

  rcutils_ret_t (* serialization_support_interface_fini)(
    rosidl_dynamic_typesupport_serialization_support_interface_t * methods);

  // ===============================================================================================
  // DYNAMIC TYPE
  // ===============================================================================================

  // DYNAMIC TYPE UTILS
  rcutils_ret_t (* dynamic_type_equals)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_type_impl_t * type,
    const rosidl_dynamic_typesupport_dynamic_type_impl_t * other,
    bool * equals);  // OUT

  // "member" from XTypes spec
  rcutils_ret_t (* dynamic_type_get_member_count)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_type_impl_t * dynamic_type,
    size_t * member_count);  // OUT


  // DYNAMIC TYPE CONSTRUCTION
  rcutils_ret_t (* dynamic_type_builder_init)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const char * name, size_t name_length,
    rcutils_allocator_t * allocator,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder);  // OUT

  rcutils_ret_t (* dynamic_type_builder_clone)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * other,
    rcutils_allocator_t * allocator,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder);  // OUT

  rcutils_ret_t (* dynamic_type_builder_fini)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder);


  rcutils_ret_t (* dynamic_type_init_from_dynamic_type_builder)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rcutils_allocator_t * allocator,
    rosidl_dynamic_typesupport_dynamic_type_impl_t * dynamic_type);  // OUT

  rcutils_ret_t (* dynamic_type_clone)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_type_impl_t * other,
    rcutils_allocator_t * allocator,
    rosidl_dynamic_typesupport_dynamic_type_impl_t * dynamic_type);  // OUT

  rcutils_ret_t (* dynamic_type_fini)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_impl_t * dynamic_type);


  rcutils_ret_t (* dynamic_type_get_name)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_type_impl_t * dynamic_type,
    const char ** name,  // OUT
    size_t * name_length);  // OUT

  rcutils_ret_t (* dynamic_type_builder_get_name)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    const char ** name,  // OUT
    size_t * name_length);  // OUT

  rcutils_ret_t (* dynamic_type_builder_set_name)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    const char * name, size_t name_length);


  // DYNAMIC TYPE PRIMITIVE MEMBERS
  rcutils_ret_t (* dynamic_type_builder_add_bool_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_byte_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_char_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_wchar_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_float32_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_float64_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_float128_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_int8_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_uint8_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_int16_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_uint16_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_int32_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_uint32_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_int64_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_uint64_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_string_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_wstring_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_fixed_string_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t string_length);

  rcutils_ret_t (* dynamic_type_builder_add_fixed_wstring_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t wstring_length);

  rcutils_ret_t (* dynamic_type_builder_add_bounded_string_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t string_bound);

  rcutils_ret_t (* dynamic_type_builder_add_bounded_wstring_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t wstring_bound);


  // DYNAMIC TYPE STATIC ARRAY MEMBERS
  rcutils_ret_t (* dynamic_type_builder_add_bool_array_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t array_length);

  rcutils_ret_t (* dynamic_type_builder_add_byte_array_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t array_length);

  rcutils_ret_t (* dynamic_type_builder_add_char_array_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t array_length);

  rcutils_ret_t (* dynamic_type_builder_add_wchar_array_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t array_length);

  rcutils_ret_t (* dynamic_type_builder_add_float32_array_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t array_length);

  rcutils_ret_t (* dynamic_type_builder_add_float64_array_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t array_length);

  rcutils_ret_t (* dynamic_type_builder_add_float128_array_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t array_length);

  rcutils_ret_t (* dynamic_type_builder_add_int8_array_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t array_length);

  rcutils_ret_t (* dynamic_type_builder_add_uint8_array_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t array_length);

  rcutils_ret_t (* dynamic_type_builder_add_int16_array_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t array_length);

  rcutils_ret_t (* dynamic_type_builder_add_uint16_array_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t array_length);

  rcutils_ret_t (* dynamic_type_builder_add_int32_array_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t array_length);

  rcutils_ret_t (* dynamic_type_builder_add_uint32_array_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t array_length);

  rcutils_ret_t (* dynamic_type_builder_add_int64_array_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t array_length);

  rcutils_ret_t (* dynamic_type_builder_add_uint64_array_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t array_length);

  rcutils_ret_t (* dynamic_type_builder_add_string_array_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t array_length);

  rcutils_ret_t (* dynamic_type_builder_add_wstring_array_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t array_length);

  rcutils_ret_t (* dynamic_type_builder_add_fixed_string_array_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t string_length, size_t array_length);

  rcutils_ret_t (* dynamic_type_builder_add_fixed_wstring_array_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t wstring_length, size_t array_length);

  rcutils_ret_t (* dynamic_type_builder_add_bounded_string_array_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t string_bound, size_t array_length);

  rcutils_ret_t (* dynamic_type_builder_add_bounded_wstring_array_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t wstring_bound, size_t array_length);


  // DYNAMIC TYPE UNBOUNDED SEQUENCE MEMBERS
  rcutils_ret_t (* dynamic_type_builder_add_bool_unbounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_byte_unbounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_char_unbounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_wchar_unbounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_float32_unbounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_float64_unbounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_float128_unbounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_int8_unbounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_uint8_unbounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_int16_unbounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_uint16_unbounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_int32_unbounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_uint32_unbounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_int64_unbounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_uint64_unbounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_string_unbounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_wstring_unbounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length);

  rcutils_ret_t (* dynamic_type_builder_add_fixed_string_unbounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t string_length);

  rcutils_ret_t (* dynamic_type_builder_add_fixed_wstring_unbounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t wstring_length);

  rcutils_ret_t (* dynamic_type_builder_add_bounded_string_unbounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t string_bound);

  rcutils_ret_t (* dynamic_type_builder_add_bounded_wstring_unbounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t wstring_bound);


  // DYNAMIC TYPE BOUNDED SEQUENCE MEMBERS
  rcutils_ret_t (* dynamic_type_builder_add_bool_bounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t sequence_bound);

  rcutils_ret_t (* dynamic_type_builder_add_byte_bounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t sequence_bound);

  rcutils_ret_t (* dynamic_type_builder_add_char_bounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t sequence_bound);

  rcutils_ret_t (* dynamic_type_builder_add_wchar_bounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t sequence_bound);

  rcutils_ret_t (* dynamic_type_builder_add_float32_bounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t sequence_bound);

  rcutils_ret_t (* dynamic_type_builder_add_float64_bounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t sequence_bound);

  rcutils_ret_t (* dynamic_type_builder_add_float128_bounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t sequence_bound);

  rcutils_ret_t (* dynamic_type_builder_add_int8_bounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t sequence_bound);

  rcutils_ret_t (* dynamic_type_builder_add_uint8_bounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t sequence_bound);

  rcutils_ret_t (* dynamic_type_builder_add_int16_bounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t sequence_bound);

  rcutils_ret_t (* dynamic_type_builder_add_uint16_bounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t sequence_bound);

  rcutils_ret_t (* dynamic_type_builder_add_int32_bounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t sequence_bound);

  rcutils_ret_t (* dynamic_type_builder_add_uint32_bounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t sequence_bound);

  rcutils_ret_t (* dynamic_type_builder_add_int64_bounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t sequence_bound);

  rcutils_ret_t (* dynamic_type_builder_add_uint64_bounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t sequence_bound);

  rcutils_ret_t (* dynamic_type_builder_add_string_bounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t sequence_bound);

  rcutils_ret_t (* dynamic_type_builder_add_wstring_bounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t sequence_bound);

  rcutils_ret_t (* dynamic_type_builder_add_fixed_string_bounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t string_length, size_t sequence_bound);

  rcutils_ret_t (* dynamic_type_builder_add_fixed_wstring_bounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t wstring_length, size_t sequence_bound);

  rcutils_ret_t (* dynamic_type_builder_add_bounded_string_bounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t string_bound, size_t sequence_bound);

  rcutils_ret_t (* dynamic_type_builder_add_bounded_wstring_bounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    size_t wstring_bound, size_t sequence_bound);


  // DYNAMIC TYPE NESTED MEMBERS
  rcutils_ret_t (* dynamic_type_builder_add_complex_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    rosidl_dynamic_typesupport_dynamic_type_impl_t * nested_struct);

  rcutils_ret_t (* dynamic_type_builder_add_complex_array_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    rosidl_dynamic_typesupport_dynamic_type_impl_t * nested_struct, size_t array_length);

  rcutils_ret_t (* dynamic_type_builder_add_complex_unbounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    rosidl_dynamic_typesupport_dynamic_type_impl_t * nested_struct);

  rcutils_ret_t (* dynamic_type_builder_add_complex_bounded_sequence_member)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    rosidl_dynamic_typesupport_dynamic_type_impl_t * nested_struct, size_t sequence_bound);


  rcutils_ret_t (* dynamic_type_builder_add_complex_member_builder)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * nested_struct_builder);

  rcutils_ret_t (* dynamic_type_builder_add_complex_array_member_builder)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * nested_struct_builder,
    size_t array_length);

  rcutils_ret_t (* dynamic_type_builder_add_complex_unbounded_sequence_member_builder)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * nested_struct_builder);

  rcutils_ret_t (* dynamic_type_builder_add_complex_bounded_sequence_member_builder)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * name, size_t name_length,
    const char * default_value, size_t default_value_length,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * nested_struct_builder,
    size_t sequence_bound);


  // ===============================================================================================
  // DYNAMIC DATA
  // ===============================================================================================

  // DYNAMIC DATA UTILS
  rcutils_ret_t (* dynamic_data_clear_all_values)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data);

  rcutils_ret_t (* dynamic_data_clear_nonkey_values)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data);

  rcutils_ret_t (* dynamic_data_clear_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id);


  rcutils_ret_t (* dynamic_data_equals)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * other,
    bool * equals);  // OUT

  // "item" from XTypes
  rcutils_ret_t (* dynamic_data_get_item_count)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    size_t * item_count);  // OUT

  rcutils_ret_t (* dynamic_data_get_member_id_by_name)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    const char * name, size_t name_length,
    rosidl_dynamic_typesupport_member_id_t * member_id);  // OUT

  rcutils_ret_t (* dynamic_data_get_member_id_at_index)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    size_t index,
    rosidl_dynamic_typesupport_member_id_t * member_id);  // OUT

  rcutils_ret_t (* dynamic_data_get_array_index)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    size_t index,
    rosidl_dynamic_typesupport_member_id_t * array_index);  // OUT


  rcutils_ret_t (* dynamic_data_loan_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    rcutils_allocator_t * allocator,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * loaned_dynamic_data);  // OUT

  rcutils_ret_t (* dynamic_data_return_loaned_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * inner_data);

  rcutils_ret_t (* dynamic_data_get_name)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    const char ** name,  // OUT
    size_t * name_length);  // OUT


  // DYNAMIC DATA CONSTRUCTION
  rcutils_ret_t (* dynamic_data_init_from_dynamic_type_builder)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_builder_impl_t * dynamic_type_builder,
    rcutils_allocator_t * allocator,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data);  // OUT

  rcutils_ret_t (* dynamic_data_init_from_dynamic_type)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_type_impl_t * type,
    rcutils_allocator_t * allocator,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data);  // OUT

  rcutils_ret_t (* dynamic_data_clone)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * other,
    rcutils_allocator_t * allocator,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data);  // OUT

  rcutils_ret_t (* dynamic_data_fini)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data);

  // DYNAMIC DATA SERIALIZATION
  // NOTE(methylDragon): I'm not sure if rcutils_uint8_array_t is the right type to pass...
  //                     On the other hand it plays well with rmw and stores the buffer, length, and
  //                     capacity...
  //
  //                     I also considered using a void * instead, but I like the idea of forcing
  //                     serialization support libraries to play with uint8_t *s instead of their
  //                     own native type.
  //
  //                     ... Though I'm betting that any of their types can be accurately
  //                     represented as such a byte array
  //
  // NOTE(methylDragon): rmw_serialized_message_t is a typedef of rcutils_uint8_array_t
  rcutils_ret_t (* dynamic_data_serialize)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rcutils_uint8_array_t * buffer);  // OUT

  rcutils_ret_t (* dynamic_data_deserialize)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,  // OUT
    rcutils_uint8_array_t * buffer);


  // DYNAMIC DATA PRIMITIVE MEMBER GETTERS
  rcutils_ret_t (* dynamic_data_get_bool_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    bool * value);  // OUT

  rcutils_ret_t (* dynamic_data_get_byte_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    uint8_t * value);  // OUT

  rcutils_ret_t (* dynamic_data_get_char_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    char * value);  // OUT

  rcutils_ret_t (* dynamic_data_get_wchar_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    char16_t * value);  // OUT

  rcutils_ret_t (* dynamic_data_get_float32_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    float * value);  // OUT

  rcutils_ret_t (* dynamic_data_get_float64_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    double * value);  // OUT

  rcutils_ret_t (* dynamic_data_get_float128_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    long double * value);  // OUT

  rcutils_ret_t (* dynamic_data_get_int8_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    int8_t * value);  // OUT

  rcutils_ret_t (* dynamic_data_get_uint8_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    uint8_t * value);  // OUT

  rcutils_ret_t (* dynamic_data_get_int16_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    int16_t * value);  // OUT

  rcutils_ret_t (* dynamic_data_get_uint16_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    uint16_t * value);  // OUT

  rcutils_ret_t (* dynamic_data_get_int32_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    int32_t * value);  // OUT

  rcutils_ret_t (* dynamic_data_get_uint32_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    uint32_t * value);  // OUT

  rcutils_ret_t (* dynamic_data_get_int64_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    int64_t * value);  // OUT

  rcutils_ret_t (* dynamic_data_get_uint64_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    uint64_t * value);  // OUT

  rcutils_ret_t (* dynamic_data_get_string_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    char ** value,  // OUT
    size_t * value_length);  // OUT

  rcutils_ret_t (* dynamic_data_get_wstring_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    char16_t ** value,  // OUT
    size_t * value_length);  // OUT

  rcutils_ret_t (* dynamic_data_get_fixed_string_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    char ** value,  // OUT
    size_t * value_length,  //  OUT
    size_t string_length);

  rcutils_ret_t (* dynamic_data_get_fixed_wstring_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    char16_t ** value,  // OUT
    size_t * value_length,  //  OUT
    size_t wstring_length);

  rcutils_ret_t (* dynamic_data_get_bounded_string_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    char ** value,  // OUT
    size_t * value_length,  //  OUT
    size_t string_bound);

  rcutils_ret_t (* dynamic_data_get_bounded_wstring_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    char16_t ** value,  // OUT
    size_t * value_length,  //  OUT
    size_t wstring_bound);


  // DYNAMIC DATA PRIMITIVE MEMBER SETTERS
  rcutils_ret_t (* dynamic_data_set_bool_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id, bool value);

  rcutils_ret_t (* dynamic_data_set_byte_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id, uint8_t value);

  rcutils_ret_t (* dynamic_data_set_char_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id, char value);

  rcutils_ret_t (* dynamic_data_set_wchar_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id, char16_t value);

  rcutils_ret_t (* dynamic_data_set_float32_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id, float value);

  rcutils_ret_t (* dynamic_data_set_float64_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id, double value);

  rcutils_ret_t (* dynamic_data_set_float128_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id, long double value);

  rcutils_ret_t (* dynamic_data_set_int8_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id, int8_t value);

  rcutils_ret_t (* dynamic_data_set_uint8_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id, uint8_t value);

  rcutils_ret_t (* dynamic_data_set_int16_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id, int16_t value);

  rcutils_ret_t (* dynamic_data_set_uint16_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id, uint16_t value);

  rcutils_ret_t (* dynamic_data_set_int32_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id, int32_t value);

  rcutils_ret_t (* dynamic_data_set_uint32_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id, uint32_t value);

  rcutils_ret_t (* dynamic_data_set_int64_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id, int64_t value);

  rcutils_ret_t (* dynamic_data_set_uint64_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id, uint64_t value);

  rcutils_ret_t (* dynamic_data_set_string_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * value, size_t value_length);

  rcutils_ret_t (* dynamic_data_set_wstring_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    const char16_t * value, size_t value_length);

  rcutils_ret_t (* dynamic_data_set_fixed_string_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * value, size_t value_length,
    size_t string_length);

  rcutils_ret_t (* dynamic_data_set_fixed_wstring_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    const char16_t * value, size_t value_length,
    size_t wstring_length);

  rcutils_ret_t (* dynamic_data_set_bounded_string_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    const char * value, size_t value_length,
    size_t string_bound);

  rcutils_ret_t (* dynamic_data_set_bounded_wstring_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    const char16_t * value, size_t value_length,
    size_t wstring_bound);


  // DYNAMIC DATA SEQUENCES
  rcutils_ret_t (* dynamic_data_clear_sequence_data)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data);

  rcutils_ret_t (* dynamic_data_remove_sequence_data)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id);

  rcutils_ret_t (* dynamic_data_insert_sequence_data)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t * out_id);  // OUT


  rcutils_ret_t (* dynamic_data_insert_bool_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    bool value,
    rosidl_dynamic_typesupport_member_id_t * out_id);  // OUT

  rcutils_ret_t (* dynamic_data_insert_byte_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    uint8_t value,
    rosidl_dynamic_typesupport_member_id_t * out_id);  // OUT

  rcutils_ret_t (* dynamic_data_insert_char_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    char value,
    rosidl_dynamic_typesupport_member_id_t * out_id);  // OUT

  rcutils_ret_t (* dynamic_data_insert_wchar_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    char16_t value,
    rosidl_dynamic_typesupport_member_id_t * out_id);  // OUT

  rcutils_ret_t (* dynamic_data_insert_float32_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    float value,
    rosidl_dynamic_typesupport_member_id_t * out_id);  // OUT

  rcutils_ret_t (* dynamic_data_insert_float64_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    double value,
    rosidl_dynamic_typesupport_member_id_t * out_id);  // OUT

  rcutils_ret_t (* dynamic_data_insert_float128_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    long double value,
    rosidl_dynamic_typesupport_member_id_t * out_id);  // OUT

  rcutils_ret_t (* dynamic_data_insert_int8_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    int8_t value,
    rosidl_dynamic_typesupport_member_id_t * out_id);  // OUT

  rcutils_ret_t (* dynamic_data_insert_uint8_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    uint8_t value,
    rosidl_dynamic_typesupport_member_id_t * out_id);  // OUT

  rcutils_ret_t (* dynamic_data_insert_int16_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    int16_t value,
    rosidl_dynamic_typesupport_member_id_t * out_id);  // OUT

  rcutils_ret_t (* dynamic_data_insert_uint16_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    uint16_t value,
    rosidl_dynamic_typesupport_member_id_t * out_id);  // OUT

  rcutils_ret_t (* dynamic_data_insert_int32_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    int32_t value,
    rosidl_dynamic_typesupport_member_id_t * out_id);  // OUT

  rcutils_ret_t (* dynamic_data_insert_uint32_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    uint32_t value,
    rosidl_dynamic_typesupport_member_id_t * out_id);  // OUT

  rcutils_ret_t (* dynamic_data_insert_int64_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    int64_t value,
    rosidl_dynamic_typesupport_member_id_t * out_id);  // OUT

  rcutils_ret_t (* dynamic_data_insert_uint64_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    uint64_t value,
    rosidl_dynamic_typesupport_member_id_t * out_id);  // OUT

  rcutils_ret_t (* dynamic_data_insert_string_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    const char * value, size_t value_length,
    rosidl_dynamic_typesupport_member_id_t * out_id);  // OUT

  rcutils_ret_t (* dynamic_data_insert_wstring_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    const char16_t * value, size_t value_length,
    rosidl_dynamic_typesupport_member_id_t * out_id);  // OUT

  rcutils_ret_t (* dynamic_data_insert_fixed_string_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    const char * value, size_t value_length, size_t string_length,
    rosidl_dynamic_typesupport_member_id_t * out_id);  // OUT

  rcutils_ret_t (* dynamic_data_insert_fixed_wstring_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    const char16_t * value, size_t value_length, size_t wstring_length,
    rosidl_dynamic_typesupport_member_id_t * out_id);  // OUT

  rcutils_ret_t (* dynamic_data_insert_bounded_string_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    const char * value, size_t value_length, size_t string_bound,
    rosidl_dynamic_typesupport_member_id_t * out_id);  // OUT

  rcutils_ret_t (* dynamic_data_insert_bounded_wstring_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    const char16_t * value, size_t value_length, size_t wstring_bound,
    rosidl_dynamic_typesupport_member_id_t * out_id);  // OUT


  // DYNAMIC DATA NESTED
  rcutils_ret_t (* dynamic_data_get_complex_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    rcutils_allocator_t * allocator,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * value);  // OUT (copies)

  rcutils_ret_t (* dynamic_data_set_complex_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_member_id_t id,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * value);


  rcutils_ret_t (* dynamic_data_insert_complex_value_copy)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    const rosidl_dynamic_typesupport_dynamic_data_impl_t * value,
    rosidl_dynamic_typesupport_member_id_t * out_id);  // OUT

  rcutils_ret_t (* dynamic_data_insert_complex_value)(
    rosidl_dynamic_typesupport_serialization_support_impl_t * serialization_support,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * dynamic_data,
    rosidl_dynamic_typesupport_dynamic_data_impl_t * value,
    rosidl_dynamic_typesupport_member_id_t * out_id);  // OUT
};

ROSIDL_DYNAMIC_TYPESUPPORT_PUBLIC
rosidl_dynamic_typesupport_serialization_support_interface_t
rosidl_dynamic_typesupport_get_zero_initialized_serialization_support_interface(void);

#ifdef __cplusplus
}
#endif

#endif  // ROSIDL_DYNAMIC_TYPESUPPORT__API__SERIALIZATION_SUPPORT_INTERFACE_H_