I am running into a bit of a problem with Protoc and my existing struct that contains nullable string fields.
The struct I am trying to serialize for transmission contains a bunch of fields that are nullable in json (so we can distinguish between null
, ""
and a set value).
type Message struct {
Path *string `json:"path"`
}
So if a user sends a empty json string {}
the Path will be nil
and not ""
, whereas {"path":""}
is also valid and a different case from {"path": null}
.
The proto3
declaration I came up with obviously looks like this (and is optional as required
and optional
got dropped from proto3:
syntax = "proto3";
message Message {
string Path = 1;
}
After running Protoc I end up with a struct that looks like this and all values are string
and no way to declare them as *string
:
type Message struct {
Path string `protobuf:"bytes,1,opt,name=Path,proto3" json:"Path,omitempty"`
}
Obviously I can't assign to this array from my existing struct. But even if I were to write the tedious mapping code with target.Path = *source.Path
with the appropriate null pointer checks etc I'd loose the triple meaning of my source struct (nil
, ""
, "value"
).
Any suggestions on how to proceed here or if there is an extension to the Go Protobuf to do this? Or how would one go about describing this proto declaration?