[ox] Make UUID serializable, and make serialize as a string in OC
This commit is contained in:
		
							
								
								
									
										6
									
								
								deps/ox/src/ox/oc/read.cpp
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								deps/ox/src/ox/oc/read.cpp
									
									
									
									
										vendored
									
									
								
							| @@ -290,6 +290,12 @@ Error OrganicClawReader::fieldCString(const char *key, char **val, std::size_t b | |||||||
| 	return err; | 	return err; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | Error OrganicClawReader::field(const char *key, UUID *val) noexcept { | ||||||
|  | 	UUIDStr str; | ||||||
|  | 	oxReturnError(field(key, &str)); | ||||||
|  | 	return UUID::fromString(str).moveTo(val); | ||||||
|  | } | ||||||
|  |  | ||||||
| Result<std::size_t> OrganicClawReader::arrayLength(const char *key, bool) noexcept { | Result<std::size_t> OrganicClawReader::arrayLength(const char *key, bool) noexcept { | ||||||
| 	const auto &jv = value(key); | 	const auto &jv = value(key); | ||||||
| 	if (jv.empty()) { | 	if (jv.empty()) { | ||||||
|   | |||||||
							
								
								
									
										3
									
								
								deps/ox/src/ox/oc/read.hpp
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								deps/ox/src/ox/oc/read.hpp
									
									
									
									
										vendored
									
									
								
							| @@ -21,6 +21,7 @@ | |||||||
| #include <ox/std/memops.hpp> | #include <ox/std/memops.hpp> | ||||||
| #include <ox/std/memory.hpp> | #include <ox/std/memory.hpp> | ||||||
| #include <ox/std/string.hpp> | #include <ox/std/string.hpp> | ||||||
|  | #include <ox/std/uuid.hpp> | ||||||
|  |  | ||||||
| namespace ox { | namespace ox { | ||||||
|  |  | ||||||
| @@ -79,6 +80,8 @@ class OrganicClawReader { | |||||||
|  |  | ||||||
| 		Error fieldCString(const char *key, char **val, std::size_t buffLen) noexcept; | 		Error fieldCString(const char *key, char **val, std::size_t buffLen) noexcept; | ||||||
|  |  | ||||||
|  | 		Error field(const char *key, UUID *val) noexcept; | ||||||
|  |  | ||||||
| 		/** | 		/** | ||||||
| 		 * Reads an array length from the current location in the buffer. | 		 * Reads an array length from the current location in the buffer. | ||||||
| 		 * @param pass indicates that the parsing should iterate past the array length | 		 * @param pass indicates that the parsing should iterate past the array length | ||||||
|   | |||||||
							
								
								
									
										9
									
								
								deps/ox/src/ox/oc/write.cpp
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								deps/ox/src/ox/oc/write.cpp
									
									
									
									
										vendored
									
									
								
							| @@ -46,6 +46,15 @@ Error OrganicClawWriter::fieldCString(const char *key, char **val) noexcept { | |||||||
| 	return fieldCString(key, const_cast<const char**>(val), {}); | 	return fieldCString(key, const_cast<const char**>(val), {}); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | Error OrganicClawWriter::field(const char *key, const UUID *uuid) noexcept { | ||||||
|  | 	const auto uuidStr = uuid->toString(); | ||||||
|  | 	if (targetValid() && uuidStr.len()) { | ||||||
|  | 		value(key) = uuidStr.c_str(); | ||||||
|  | 	} | ||||||
|  | 	++m_fieldIt; | ||||||
|  | 	return {}; | ||||||
|  | } | ||||||
|  |  | ||||||
| Json::Value &OrganicClawWriter::value(const char *key) noexcept { | Json::Value &OrganicClawWriter::value(const char *key) noexcept { | ||||||
| 	if (m_json.isArray()) { | 	if (m_json.isArray()) { | ||||||
| 		return m_json[m_fieldIt]; | 		return m_json[m_fieldIt]; | ||||||
|   | |||||||
							
								
								
									
										7
									
								
								deps/ox/src/ox/oc/write.hpp
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								deps/ox/src/ox/oc/write.hpp
									
									
									
									
										vendored
									
									
								
							| @@ -18,6 +18,7 @@ | |||||||
| #include <ox/std/buffer.hpp> | #include <ox/std/buffer.hpp> | ||||||
| #include <ox/std/hashmap.hpp> | #include <ox/std/hashmap.hpp> | ||||||
| #include <ox/std/string.hpp> | #include <ox/std/string.hpp> | ||||||
|  | #include <ox/std/uuid.hpp> | ||||||
|  |  | ||||||
| namespace ox { | namespace ox { | ||||||
|  |  | ||||||
| @@ -105,7 +106,7 @@ class OrganicClawWriter { | |||||||
| 				value(key) = *val; | 				value(key) = *val; | ||||||
| 			} | 			} | ||||||
| 			++m_fieldIt; | 			++m_fieldIt; | ||||||
| 			return OxError(0); | 			return {}; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		template<typename T> | 		template<typename T> | ||||||
| @@ -130,7 +131,7 @@ class OrganicClawWriter { | |||||||
| 				value(key) = w.m_json; | 				value(key) = w.m_json; | ||||||
| 			} | 			} | ||||||
| 			++m_fieldIt; | 			++m_fieldIt; | ||||||
| 			return OxError(0); | 			return {}; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		template<typename T> | 		template<typename T> | ||||||
| @@ -172,6 +173,8 @@ class OrganicClawWriter { | |||||||
|  |  | ||||||
| 		Error fieldCString(const char *name, char **val) noexcept; | 		Error fieldCString(const char *name, char **val) noexcept; | ||||||
|  |  | ||||||
|  | 		Error field(const char *key, const UUID *uuid) noexcept; | ||||||
|  |  | ||||||
| 		template<typename T> | 		template<typename T> | ||||||
| 		Error field(const char*, T *val) noexcept; | 		Error field(const char*, T *val) noexcept; | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										9
									
								
								deps/ox/src/ox/std/bstring.hpp
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								deps/ox/src/ox/std/bstring.hpp
									
									
									
									
										vendored
									
									
								
							| @@ -64,6 +64,10 @@ class BString { | |||||||
|  |  | ||||||
| 		constexpr Error append(const char *str, std::size_t strLen) noexcept; | 		constexpr Error append(const char *str, std::size_t strLen) noexcept; | ||||||
|  |  | ||||||
|  | 		[[nodiscard]] | ||||||
|  | 		constexpr const char *data() const noexcept; | ||||||
|  |  | ||||||
|  | 		[[nodiscard]] | ||||||
| 		constexpr char *data() noexcept; | 		constexpr char *data() noexcept; | ||||||
|  |  | ||||||
| 		[[nodiscard]] | 		[[nodiscard]] | ||||||
| @@ -228,6 +232,11 @@ constexpr Error BString<buffLen>::append(const char *str, std::size_t strLen) no | |||||||
| 	return err; | 	return err; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | template<std::size_t buffLen> | ||||||
|  | constexpr const char *BString<buffLen>::data() const noexcept { | ||||||
|  | 	return static_cast<const char*>(m_buff); | ||||||
|  | } | ||||||
|  |  | ||||||
| template<std::size_t buffLen> | template<std::size_t buffLen> | ||||||
| constexpr char *BString<buffLen>::data() noexcept { | constexpr char *BString<buffLen>::data() noexcept { | ||||||
| 	return static_cast<char*>(m_buff); | 	return static_cast<char*>(m_buff); | ||||||
|   | |||||||
							
								
								
									
										11
									
								
								deps/ox/src/ox/std/uuid.hpp
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								deps/ox/src/ox/std/uuid.hpp
									
									
									
									
										vendored
									
									
								
							| @@ -90,7 +90,9 @@ constexpr ox::BString<2> toHex(uint8_t v) noexcept { | |||||||
| } | } | ||||||
|  |  | ||||||
| class UUID { | class UUID { | ||||||
| 	private: | 	template<typename T> | ||||||
|  | 	friend constexpr Error model(T *io, ox::CommonPtrWith<UUID> auto *obj) noexcept; | ||||||
|  | 	protected: | ||||||
| 		static bool s_seeded; | 		static bool s_seeded; | ||||||
| 		static Random s_rand; | 		static Random s_rand; | ||||||
| 		ox::Array<uint8_t, 16> m_value; | 		ox::Array<uint8_t, 16> m_value; | ||||||
| @@ -158,4 +160,11 @@ class UUID { | |||||||
| 		} | 		} | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | template<typename T> | ||||||
|  | constexpr Error model(T *io, ox::CommonPtrWith<UUID> auto *obj) noexcept { | ||||||
|  | 	io->template setTypeInfo<UUID>(); | ||||||
|  | 	oxReturnError(io->field("value", &obj->m_value)); | ||||||
|  | 	return {}; | ||||||
|  | } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user