Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Declaring a field tag in proto message

I just dived in Go programming using protobuf and I'm at the point where I need to validate data in a struct. I found govalidator, which seems to do the perfect job for what I need. It does validate structs based on the field tags, something like

type Contact struct {
    firstName string `valid:"alpha,required"`
    lastName string `valid:"alpha,required"`
    email string `valid:"email,required"`
}

jdoe := &Contact{
    firstName: "John",
    lastName: "Doe",
    email: "[email protected]"
}

ok, err = govalidator.ValidateStruct(jdoe)

And my protobuf definition would look like

message Contact {
    string firstName = 1;
    string lastName = 2;
    string email = 3;
}

Now my question would be, is there a way to define the field tags in the proto message. From what I've seen in the generated go code, the compiler adds tags to the fields anyway, but could I "sneak" the ones that I need too? Also, I would imagine that unmarshalling could be one possible solution, but it somehow seems inefficient to me to unmarshal just to copy the field values to an equivalent struct which would have the necessary field tags.

like image 514
Havelock Avatar asked Oct 31 '22 09:10

Havelock


1 Answers

Having the same structure for the data encapsulation and the input coming from the client was just a pure coincidence. As it has been suggested not only in the comments, but also by co-workers more experienced (than me) with protobuf I've just mapped (1:1 in this particular case) the fields from the structure generated by proto to the data encapsulation structure I have defined.

like image 196
Havelock Avatar answered Nov 08 '22 03:11

Havelock