Network System 0.1.1
High-performance modular networking library for scalable client-server applications
Loading...
Searching...
No Matches
container_integration.h
Go to the documentation of this file.
1// BSD 3-Clause License
2// Copyright (c) 2021-2025, 🍀☀🌕🌥 🌊
3// See the LICENSE file in the project root for full license information.
4
5#pragma once
6#ifndef KCENON_NETWORK_INTERNAL_INTEGRATION_CONTAINER_INTEGRATION_H_
7#define KCENON_NETWORK_INTERNAL_INTEGRATION_CONTAINER_INTEGRATION_H_
8
10
22#include <memory>
23#include <vector>
24#include <string>
25#include <functional>
26#include <any>
27
29
30#if KCENON_WITH_CONTAINER_SYSTEM
31#include "container.h"
32#endif
33
35
44public:
45 virtual ~container_interface() = default;
46
52 virtual std::vector<uint8_t> serialize(const std::any& data) const = 0;
53
59 virtual std::any deserialize(const std::vector<uint8_t>& bytes) const = 0;
60
65 virtual std::string type_name() const = 0;
66
71 virtual bool is_valid() const = 0;
72};
73
74#if KCENON_WITH_CONTAINER_SYSTEM
82class container_system_adapter : public container_interface {
83public:
88 explicit container_system_adapter(
89 std::shared_ptr<container_module::value_container> container
90 );
91
92 // container_interface implementation
93 std::vector<uint8_t> serialize(const std::any& data) const override;
94 std::any deserialize(const std::vector<uint8_t>& bytes) const override;
95 std::string type_name() const override;
96 bool is_valid() const override;
97
102 std::shared_ptr<container_module::value_container> get_container() const;
103
104private:
105 std::shared_ptr<container_module::value_container> container_;
106};
107#endif
108
117public:
120
121 // container_interface implementation
122 std::vector<uint8_t> serialize(const std::any& data) const override;
123 std::any deserialize(const std::vector<uint8_t>& bytes) const override;
124 std::string type_name() const override;
125 bool is_valid() const override;
126
131 void set_serializer(
132 std::function<std::vector<uint8_t>(const std::any&)> serializer
133 );
134
139 void set_deserializer(
140 std::function<std::any(const std::vector<uint8_t>&)> deserializer
141 );
142
143private:
144 class impl;
145 std::unique_ptr<impl> pimpl_;
146};
147
156public:
161 static container_manager& instance();
162
169 const std::string& name,
170 std::shared_ptr<container_interface> container
171 );
172
178 std::shared_ptr<container_interface> get_container(
179 const std::string& name
180 ) const;
181
187 std::shared_ptr<container_interface> container
188 );
189
194 std::shared_ptr<container_interface> get_default_container();
195
201 std::vector<uint8_t> serialize(const std::any& data);
202
208 std::any deserialize(const std::vector<uint8_t>& bytes);
209
214 std::vector<std::string> list_containers() const;
215
216private:
219
220 class impl;
221 std::unique_ptr<impl> pimpl_;
222};
223
224} // namespace kcenon::network::integration
225
226// Backward compatibility namespace alias is defined in thread_integration.h
227
228#endif // KCENON_NETWORK_INTERNAL_INTEGRATION_CONTAINER_INTEGRATION_H_
Basic container implementation for standalone use.
bool is_valid() const override
Check if container is valid.
void set_deserializer(std::function< std::any(const std::vector< uint8_t > &)> deserializer)
Set custom deserializer.
std::vector< uint8_t > serialize(const std::any &data) const override
Serialize data to bytes.
std::any deserialize(const std::vector< uint8_t > &bytes) const override
Deserialize bytes to data.
void set_serializer(std::function< std::vector< uint8_t >(const std::any &)> serializer)
Set custom serializer.
std::string type_name() const override
Get container type name.
Abstract interface for container operations.
virtual std::any deserialize(const std::vector< uint8_t > &bytes) const =0
Deserialize bytes to data.
virtual bool is_valid() const =0
Check if container is valid.
virtual std::vector< uint8_t > serialize(const std::any &data) const =0
Serialize data to bytes.
virtual std::string type_name() const =0
Get container type name.
Manager for container system integration.
void register_container(const std::string &name, std::shared_ptr< container_interface > container)
Register a container implementation.
static container_manager & instance()
Get the singleton instance.
std::shared_ptr< container_interface > get_container(const std::string &name) const
Get a registered container.
std::shared_ptr< container_interface > get_default_container()
Get default container.
std::any deserialize(const std::vector< uint8_t > &bytes)
Deserialize using default container.
std::vector< uint8_t > serialize(const std::any &data)
Serialize using default container.
void set_default_container(std::shared_ptr< container_interface > container)
Set default container.
std::vector< std::string > list_containers() const
Get list of registered container names.
Feature flags for network_system.
Thread system integration interface for network_system.