Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions source/asdf/serialization.d
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import mir.reflection;
import std.range.primitives: isOutputRange;
public import mir.serde;
import mir.internal_asdf: hasUDA;
import std.uuid: UUID, UUIDParsingException;

///
pure
Expand Down Expand Up @@ -2167,6 +2168,38 @@ SerdeException deserializeValue(V)(Asdf data, ref V value)
return null;
}

/// UUID serialization
void serializeValue(S)(ref S serializer, const UUID value)
{
serializer.putValue(value.toString());
}

/// Deserialize UUID value
SerdeException deserializeValue(V : UUID)(Asdf data, ref V value)
{
auto kind = data.kind;
if (kind == Asdf.Kind.string)
{
const(char)[] v;
.deserializeScopedString(data, v);
try
{
value = UUID(v);
}
catch (UUIDParsingException e)
{
return new SerdeException("Invalid UUID string: " ~ cast(string)v);
}
return null;
}
else if (kind == Asdf.Kind.null_)
{
value = UUID.init;
return null;
}
return unexpectedKind(kind);
}

///
unittest
{
Expand Down