proto-gae

proto-gae is a simple go generate-compatible tool for generating “go.chromium.org/luci/gae/service/datastore”.PropertyConverter implementation for protoc-generated message types. This allows you to embed proto.Message implementations into your datastore models.

The generated implementations serialize to/from the binary protobuf format into an unindexed []byte property.

Example

path/to/mything/protos/mything.proto

syntax = "proto3";
package protos;
message MyProtoThing {
  my string = 1;
  proto int64 = 1;
  thing float = 1;
}

path/to/mything/protos/gen.go

package protos
// assume go.chromium.org/luci/tools/cmd/cproto is in $PATH. Try it, it's
// awesome :).

//go:generate cproto
//go:generate proto-gae -type MyProtoThing

path/to/mything/thing.go

package mything

import "path/to/package/protos"

type DatastoreModel struct {
  // This will now 'just work'; ProtoMessage will round-trip to datastore as
  // []byte.
  ProtoMessage protos.MyProtoThing
}