34 ComponentStorage() =
default;
36 explicit ComponentStorage(SafeDeserializeFn safe_deserialize)
37 : safe_deserialize_(std::move(safe_deserialize))
43 void Serialize(
Node& node)
const override
45 node.set_type(NodeType::Array);
46 auto& properties = node.properties();
48 for (
const auto& entry : components)
51 entry_node[
"entity"] << entry.id;
53 component_node << entry.value;
54 entry_node[
"component"] = component_node;
55 properties.push_back({
"", entry_node });
59 void Deserialize(
const Node& node)
override
61 ASSERT(node.type() == NodeType::Array || node.type() == NodeType::Null,
"Expected component storage data to be an array");
62 for (
const auto& [key, entry_node] : node.properties())
66 entry_node[
"entity"] >> entity;
67 DeserializeComponent(entity, entry_node[
"component"]);
71 void DeserializeComponent(
const uint32_t entity,
const Node& node)
override
75 components.insert_or_assign(entity, std::move(component));
79 const std::string_view diagnostic_path)
override
82 if (!safe_deserialize_)
86 "Component type '" + std::string(
typeid(T).name()) +
"' does not support safe deserialization.",
88 .message =
"Component type does not support safe deserialization." } },
92 if (
const SerializationResult result = safe_deserialize_(component, node, diagnostic_path); !result)
97 components.insert_or_assign(entity, std::move(component));
101 void Clear()
override
106 void RemoveComponent(uint32_t entity)
override
108 components.erase(entity);
112 SafeDeserializeFn safe_deserialize_;