zengine-old/engine/3rdparty/zlib/include/yaml/yaml.h

28 lines
658 B
C
Raw Normal View History

2024-06-14 22:25:34 +08:00
#pragma once
#include "serialize/binary.inl"
#include "serialize/text.inl"
2024-06-17 00:25:00 +08:00
#include "meta/result.inl"
2024-06-14 22:25:34 +08:00
namespace YAML
{
2024-06-17 00:25:00 +08:00
using meta::result;
enum class SerializeError : char
{
TEXT_EMPTY,
TYPE_ERROR,
};
2024-06-28 00:03:52 +08:00
inline string Text_Serialize(const Any& any) {
2024-06-14 22:25:34 +08:00
return Dump(TextArchive::Serialize(any));
}
template<typename T>
2024-06-28 00:03:52 +08:00
inline result<T, SerializeError> Text_Unserialize(const string& text) {
2024-06-17 00:25:00 +08:00
if (text.empty()) {
return SerializeError::TEXT_EMPTY;
}
2024-06-14 22:25:34 +08:00
char data[sizeof(T)];
Any any(&data, &TypeInfo<T>::StaticClass);
2024-06-17 00:25:00 +08:00
if (!TextArchive::Unserialize(Load(text), any)) {
return SerializeError::TYPE_ERROR;
}
2024-06-14 22:25:34 +08:00
return *any.CastTo<T*>();
}
}