2525
2626#include " iceberg/util/endian.h"
2727#include " iceberg/util/macros.h"
28+ #include " iceberg/util/uuid.h"
2829
2930namespace iceberg {
3031
@@ -69,6 +70,12 @@ Result<std::vector<uint8_t>> ToBytesImpl<TypeId::kString>(const Literal::Value&
6970 return std::vector<uint8_t >(str.begin (), str.end ());
7071}
7172
73+ template <>
74+ Result<std::vector<uint8_t >> ToBytesImpl<TypeId::kUuid >(const Literal::Value& value) {
75+ const auto & uuid = std::get<Uuid>(value);
76+ return std::vector<uint8_t >(uuid.bytes ().begin (), uuid.bytes ().end ());
77+ }
78+
7279template <>
7380Result<std::vector<uint8_t >> ToBytesImpl<TypeId::kBinary >(const Literal::Value& value) {
7481 return std::get<std::vector<uint8_t >>(value);
@@ -98,9 +105,10 @@ Result<std::vector<uint8_t>> Conversions::ToBytes(const PrimitiveType& type,
98105 DISPATCH_LITERAL_TO_BYTES (TypeId::kDouble )
99106 DISPATCH_LITERAL_TO_BYTES (TypeId::kBoolean )
100107 DISPATCH_LITERAL_TO_BYTES (TypeId::kString )
108+ DISPATCH_LITERAL_TO_BYTES (TypeId::kUuid )
101109 DISPATCH_LITERAL_TO_BYTES (TypeId::kBinary )
102110 DISPATCH_LITERAL_TO_BYTES (TypeId::kFixed )
103- // TODO(Li Feiyang): Add support for UUID and Decimal
111+ // TODO(Li Feiyang): Add support for Decimal
104112
105113 default :
106114 return NotSupported (" Serialization for type {} is not supported" , type.ToString ());
@@ -172,6 +180,10 @@ Result<Literal::Value> Conversions::FromBytes(const PrimitiveType& type,
172180 case TypeId::kString :
173181 return Literal::Value{
174182 std::string (reinterpret_cast <const char *>(data.data ()), data.size ())};
183+ case TypeId::kUuid : {
184+ ICEBERG_ASSIGN_OR_RAISE (auto uuid, Uuid::FromBytes (data));
185+ return Literal::Value{uuid};
186+ }
175187 case TypeId::kBinary :
176188 return Literal::Value{std::vector<uint8_t >(data.begin (), data.end ())};
177189 case TypeId::kFixed : {
@@ -182,7 +194,7 @@ Result<Literal::Value> Conversions::FromBytes(const PrimitiveType& type,
182194 }
183195 return Literal::Value{std::vector<uint8_t >(data.begin (), data.end ())};
184196 }
185- // TODO(Li Feiyang): Add support for UUID and Decimal
197+ // TODO(Li Feiyang): Add support for Decimal
186198 default :
187199 return NotSupported (" Deserialization for type {} is not supported" ,
188200 type.ToString ());
0 commit comments