I want to attach a UUID to a field in my protobuf User message example.
message User {
// field containing id as UUID type
required string email;
optional string name;
}
I know that protobuf messages do not yet support the UUID type. I've read that the best approach is to have a UUID message type.
So I'm guessing my User message would import my UUID message proto definition and use it as a field type like so:
import "myproject/UUID.proto";
message User {
required UUID id;
required string email;
optional string name;
}
My question is, what will the UUID message look like, and how will I encode/decode it? I'm aiming for Java/Scala and C# compatibility.
You should probably use string
or bytes
to represent a UUID. Use string
if it is most convenient to keep the UUID in human-readable format (e.g. "de305d54-75b4-431b-adb2-eb6b9e546014"
) or use bytes
if you are storing the 128-bit value raw. (If you aren't sure, you probably want string
.)
Wrapping the value in a message type called UUID
can be helpful to make the code more self-documenting but will have some performance overhead and isn't strictly required. If you want to do this, define the type like:
message UUID {
required string value = 1;
}
or:
message UUID {
required bytes value = 1;
}