> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/holoscan/sdk-user-guide/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/holoscan/sdk-user-guide/_mcp/server.

# holoscan::HoloEntitySerializerBase

> Shared HOLO/NDPL entity serializer core, parameterized on the endpoint type.

```cpp showLineNumbers={false}
template <typename EndpointT>
class HoloEntitySerializerBase
```

Shared HOLO/NDPL entity serializer core, parameterized on the endpoint type.

Implements the full PubSubEntitySerializer interface: entity serialize/deserialize using the "HOLO" wire format, and native-descriptor export/import using the NDPL envelope. Subclasses only provide the constructor (passing endpoint type and name).

EndpointT must provide: write(), read(), write\_trivial\_type(), read\_trivial\_type(), bytes\_written(), bytes\_remaining(), and constructors from vector\<uint8\_t>\* (write), const vector\<uint8\_t>\* (read), and (uint8\_t\*, size\_t) (write into buffer).

```cpp showLineNumbers={false}
#include <holoscan/holo_entity_serializer_base.hpp>
```

**Template parameters**

**`EndpointT`** `typename`

---

**Inherits from:** `nvidia::gxf::PubSubEntitySerializer` (public)

---

## Constructors

### HoloEntitySerializerBase \[#holoentityserializerbase]

#### Overload 2

```cpp showLineNumbers={false}
holoscan::HoloEntitySerializerBase<EndpointT>::HoloEntitySerializerBase(
    std::string serializer_name,
    cudaStream_t cuda_stream = nullptr
)
```

#### Copy (deleted)

```cpp showLineNumbers={false}
holoscan::HoloEntitySerializerBase<EndpointT>::HoloEntitySerializerBase(
    const HoloEntitySerializerBase &
) = delete
```

### Destructor \[#destructor]

### \~HoloEntitySerializerBase

```cpp showLineNumbers={false}
holoscan::HoloEntitySerializerBase<EndpointT>::~HoloEntitySerializerBase() override = default
```

---

## Assignment operators

### operator= \[#operator\_assign]

```cpp showLineNumbers={false}
HoloEntitySerializerBase & holoscan::HoloEntitySerializerBase<EndpointT>::operator=(
    const HoloEntitySerializerBase &
) = delete
```

---

## Methods

### serialize \[#serialize]

```cpp showLineNumbers={false}
nvidia::gxf::Expected<std::vector<uint8_t>> holoscan::HoloEntitySerializerBase<EndpointT>::serialize(
    nvidia::gxf::Entity entity,
    nvidia::gxf::Handle<nvidia::gxf::Allocator> allocator = nvidia::gxf::Handle<nvidia::gxf::Allocator>()
) override
```

### serialize\_into \[#serializeinto]

```cpp showLineNumbers={false}
nvidia::gxf::Expected<size_t> holoscan::HoloEntitySerializerBase<EndpointT>::serialize_into(
    nvidia::gxf::Entity entity,
    uint8_t *buffer,
    size_t buffer_size,
    nvidia::gxf::Handle<nvidia::gxf::Allocator> allocator = nvidia::gxf::Handle<nvidia::gxf::Allocator>()
) override
```

### deserialize \[#deserialize]

```cpp showLineNumbers={false}
nvidia::gxf::Expected<nvidia::gxf::Entity> holoscan::HoloEntitySerializerBase<EndpointT>::deserialize(
    const std::vector<uint8_t> &data,
    gxf_context_t context,
    nvidia::gxf::Handle<nvidia::gxf::Allocator> allocator
) override
```

### estimate\_size \[#estimatesize]

```cpp showLineNumbers={false}
size_t holoscan::HoloEntitySerializerBase<EndpointT>::estimate_size(
    nvidia::gxf::Entity entity
) override
```

### supports\_gpu\_tensors \[#supportsgputensors]

```cpp showLineNumbers={false}
bool holoscan::HoloEntitySerializerBase<EndpointT>::supports_gpu_tensors() const override
```

### supports\_zero\_copy \[#supportszerocopy]

```cpp showLineNumbers={false}
bool holoscan::HoloEntitySerializerBase<EndpointT>::supports_zero_copy() const override
```

### supports\_direct\_buffer\_serialization \[#supportsdirectbufferserialization]

```cpp showLineNumbers={false}
bool holoscan::HoloEntitySerializerBase<EndpointT>::supports_direct_buffer_serialization() const override
```

### supports\_native\_descriptors \[#supportsnativedescriptors]

```cpp showLineNumbers={false}
bool holoscan::HoloEntitySerializerBase<EndpointT>::supports_native_descriptors() const override
```

### export\_native\_descriptor \[#exportnativedescriptor]

```cpp showLineNumbers={false}
nvidia::gxf::Expected<void> holoscan::HoloEntitySerializerBase<EndpointT>::export_native_descriptor(
    gxf_uid_t entity_uid,
    gxf_context_t context,
    nvidia::gxf::Handle<nvidia::gxf::Allocator> allocator,
    nvidia::gxf::NativeDescriptorPayload &out_payload,
    const std::string &protocol_name = ""
) override
```

### import\_native\_descriptor \[#importnativedescriptor]

```cpp showLineNumbers={false}
nvidia::gxf::Expected<nvidia::gxf::Entity> holoscan::HoloEntitySerializerBase<EndpointT>::import_native_descriptor(
    const nvidia::gxf::NativeDescriptorPayload &payload,
    gxf_context_t context,
    nvidia::gxf::Handle<nvidia::gxf::Allocator> allocator
) override
```

### name \[#name]

```cpp showLineNumbers={false}
const char * holoscan::HoloEntitySerializerBase<EndpointT>::name() const override
```

### set\_native\_buffer\_adapter \[#setnativebufferadapter]

```cpp showLineNumbers={false}
void holoscan::HoloEntitySerializerBase<EndpointT>::set_native_buffer_adapter(
    std::shared_ptr<NativeBufferProtocolAdapter> adapter
)
```

### set\_cuda\_stream \[#setcudastream]

```cpp showLineNumbers={false}
void holoscan::HoloEntitySerializerBase<EndpointT>::set_cuda_stream(
    cudaStream_t stream
)
```

### cuda\_stream \[#cudastream]

```cpp showLineNumbers={false}
cudaStream_t holoscan::HoloEntitySerializerBase<EndpointT>::cuda_stream() const
```

### primitive\_type\_to\_uint \[#primitivetypetouint]

```cpp showLineNumbers={false}
static uint32_t holoscan::HoloEntitySerializerBase<EndpointT>::primitive_type_to_uint(
    nvidia::gxf::PrimitiveType type
)
```

### uint\_to\_primitive\_type \[#uinttoprimitivetype]

```cpp showLineNumbers={false}
static nvidia::gxf::PrimitiveType holoscan::HoloEntitySerializerBase<EndpointT>::uint_to_primitive_type(
    uint32_t value
)
```

### storage\_type\_to\_uint \[#storagetypetouint]

```cpp showLineNumbers={false}
static uint32_t holoscan::HoloEntitySerializerBase<EndpointT>::storage_type_to_uint(
    nvidia::gxf::MemoryStorageType type
)
```

### uint\_to\_storage\_type \[#uinttostoragetype]

```cpp showLineNumbers={false}
static nvidia::gxf::MemoryStorageType holoscan::HoloEntitySerializerBase<EndpointT>::uint_to_storage_type(
    uint32_t value
)
```

### serialize\_string \[#serializestring]

```cpp showLineNumbers={false}
static expected<size_t, RuntimeError> holoscan::HoloEntitySerializerBase<EndpointT>::serialize_string(
    const std::string &data,
    EndpointT *endpoint
)
```

### deserialize\_string \[#deserializestring]

```cpp showLineNumbers={false}
static expected<std::string, RuntimeError> holoscan::HoloEntitySerializerBase<EndpointT>::deserialize_string(
    EndpointT *endpoint
)
```

### ensure\_type\_ids \[#ensuretypeids]

```cpp showLineNumbers={false}
bool holoscan::HoloEntitySerializerBase<EndpointT>::ensure_type_ids(
    gxf_context_t context
)
```

### serialize\_to\_endpoint \[#serializetoendpoint]

```cpp showLineNumbers={false}
nvidia::gxf::Expected<size_t> holoscan::HoloEntitySerializerBase<EndpointT>::serialize_to_endpoint(
    nvidia::gxf::Entity entity,
    EndpointT &endpoint,
    nvidia::gxf::Handle<nvidia::gxf::Allocator> allocator
)
```

### serialize\_non\_gpu\_sideband \[#serializenongpusideband]

```cpp showLineNumbers={false}
nvidia::gxf::Expected<std::vector<uint8_t>> holoscan::HoloEntitySerializerBase<EndpointT>::serialize_non_gpu_sideband(
    nvidia::gxf::Entity entity
)
```

### deserialize\_non\_gpu\_sideband \[#deserializenongpusideband]

```cpp showLineNumbers={false}
nvidia::gxf::Expected<void> holoscan::HoloEntitySerializerBase<EndpointT>::deserialize_non_gpu_sideband(
    const uint8_t *data,
    size_t size,
    nvidia::gxf::Entity &entity,
    nvidia::gxf::Handle<nvidia::gxf::Allocator> allocator = nvidia::gxf::Handle<nvidia::gxf::Allocator>()
)
```

### stage\_tensor\_to\_host \[#stagetensortohost]

```cpp showLineNumbers={false}
nvidia::gxf::Expected<std::vector<uint8_t>> holoscan::HoloEntitySerializerBase<EndpointT>::stage_tensor_to_host(
    const void *gpu_ptr,
    size_t size
)
```

### stage\_host\_to\_device \[#stagehosttodevice]

```cpp showLineNumbers={false}
nvidia::gxf::Expected<void> holoscan::HoloEntitySerializerBase<EndpointT>::stage_host_to_device(
    void *gpu_ptr,
    const void *host_ptr,
    size_t size
)
```

---

## Types

### ComponentType

| Name                  | Value | Description |
| --------------------- | ----- | ----------- |
| `kUnknown`            | `= 0` |             |
| `kTensor`             | `= 1` |             |
| `kTimestamp`          | `= 2` |             |
| `kMessage`            | `= 3` |             |
| `kMetadataDictionary` | `= 4` |             |
| `kMessageLabel`       | `= 5` |             |

---

## Member variables

| Name                                       | Type                                             | Description |
| ------------------------------------------ | ------------------------------------------------ | ----------- |
| `kFlagIsGpuTensor` static constexpr        | `uint32_t`                                       |             |
| `serializer_name_`                         | `std::string`                                    |             |
| `kMaxComponentNameLength` static constexpr | `size_t`                                         |             |
| `kMaxComponentDataSize` static constexpr   | `size_t`                                         |             |
| `kMaxTensorBytes` static constexpr         | `size_t`                                         |             |
| `kMaxMetadataItems` static constexpr       | `size_t`                                         |             |
| `kMaxMessageLabelPaths` static constexpr   | `size_t`                                         |             |
| `kMaxOperatorsPerPath` static constexpr    | `size_t`                                         |             |
| `cuda_stream_`                             | `cudaStream_t`                                   |             |
| `native_adapter_`                          | `std::shared_ptr< NativeBufferProtocolAdapter >` |             |
| `sequence_counter_`                        | `std::atomic< uint32_t >`                        |             |

---

## Inner classes

### SerializationHeader

```cpp showLineNumbers={false}
struct holoscan::HoloEntitySerializerBase::SerializationHeader
```

| Name             | Type       | Description |
| ---------------- | ---------- | ----------- |
| `magic`          | `uint32_t` |             |
| `version`        | `uint32_t` |             |
| `num_components` | `uint32_t` |             |
| `flags`          | `uint32_t` |             |
| `total_size`     | `uint64_t` |             |

### ComponentHeader

```cpp showLineNumbers={false}
struct holoscan::HoloEntitySerializerBase::ComponentHeader
```

| Name          | Type       | Description |
| ------------- | ---------- | ----------- |
| `type_id`     | `uint32_t` |             |
| `name_length` | `uint32_t` |             |
| `data_size`   | `uint32_t` |             |
| `flags`       | `uint32_t` |             |

### TensorMetadata

```cpp showLineNumbers={false}
struct holoscan::HoloEntitySerializerBase::TensorMetadata
```

| Name                | Type       | Description |
| ------------------- | ---------- | ----------- |
| `rank`              | `uint32_t` |             |
| `element_type`      | `uint32_t` |             |
| `storage_type`      | `uint32_t` |             |
| `bytes_per_element` | `uint64_t` |             |
| `total_bytes`       | `uint64_t` |             |
| `shape`             | `uint64_t` |             |
| `strides`           | `uint64_t` |             |