syntax = "proto3"; // playing around with ideas here package gitpb; import "google/protobuf/timestamp.proto"; // Import the well-known type for Timestamp import "google/protobuf/any.proto"; // Import the well-known type for Timestamp import "widget.proto"; // Import the well-known type for Timestamp // // this code was written this way to make it easy for me // to originally implement and auto generate the needed code // with autogenpb // // experiments in various options. think about this more. message ColAttr { enum VarType { ANY = 0; INT = 1; STRING = 2; TIME = 3; DURATION = 4; BYTES = 5; } int32 pad = 1; int32 width = 2; bool click = 3; VarType type = 4; } message StringCol { Widget header = 1; repeated Widget widgets = 2; ColAttr attr = 3; repeated string vals = 4; // deprecate } message ButtonCol { Widget header = 1; repeated Widget widgets = 2; ColAttr attr = 3; repeated string vals = 4; // deprecate } message IntCol { Widget header = 1; repeated Widget widgets = 2; ColAttr attr = 3; repeated int64 vals = 4; // deprecate } message TimeCol { Widget header = 1; repeated Widget widgets = 2; ColAttr attr = 3; repeated google.protobuf.Timestamp vals = 4; // deprecate } message BoolCol { Widget header = 1; repeated Widget widgets = 2; ColAttr attr = 3; repeated bool vals = 4; // deprecate } message AnyCol { Widget header = 1; repeated Widget widgets = 2; ColAttr attr = 3; repeated google.protobuf.Any vals = 4; // deprecate } message Table { // `autogenpb:marshal` string uuid = 1; string title = 2; Widget parent = 3; Widget grid = 4; repeated string order = 5; repeated StringCol stringCols = 6; repeated IntCol intCols = 7; repeated TimeCol timeCols = 8; repeated BoolCol boolCols = 9; repeated ButtonCol buttonCols = 10; repeated AnyCol anyCols = 11; int64 height = 12; // the number of rows } message Tables { // `autogenpb:marshal` string uuid = 1; // `autogenpb:uuid:c328aa62-3c4f-4d00-9244-cc44ae75ab1b` string version = 2; // `autogenpb:version:v1` repeated Table Tables = 3; }