Struct
YAML struct guide.
General struct
A worksheet ItemConf
in HelloWorld.yaml:
# define metasheet: generate all sheets
"@sheet": "@TABLEAU"
---
# define schema
"@sheet": "@ItemConf"
Item:
"@type": "{Item}"
ID: uint32
StartTime: datetime
Expiry: duration
---
"@sheet": ItemConf
Item:
ID: 1
StartTime: 2024-10-01 10:10:10
Expiry: 1h
Tips
- Well-known type: datetime â
- Well-known type: duration â
Generated:
hello_world.proto
// --snip--
option (tableau.workbook) = {name:"HelloWorld.yaml"};
message ItemConf {
option (tableau.worksheet) = {name:"ItemConf"};
Item item = 1 [(tableau.field) = {name:"Item"}];
message Item {
uint32 id = 1 [(tableau.field) = {name:"ID"}];
google.protobuf.Timestamp start_time = 2 [(tableau.field) = {name:"StartTime"}];
google.protobuf.Duration expiry = 3 [(tableau.field) = {name:"Expiry"}];
}
}
ItemConf.json
{
"item": {
"id": 1,
"startTime": "2024-10-01T02:10:10Z",
"expiry": "3600s"
}
}
Reuse same-level struct
A worksheet ItemConf
in HelloWorld.yaml:
# define metasheet: generate all sheets
"@sheet": "@TABLEAU"
---
# define schema
"@sheet": "@ItemConf"
Item:
"@type": "{Item}"
ID: uint32
StartTime: datetime
Expiry: duration
NewItem: "{Item}" # reuse predefined struct type Item above
---
"@sheet": ItemConf
Item:
ID: 1
StartTime: 2024-10-01 10:10:10
Expiry: 1h
NewItem:
ID: 2
StartTime: 2026-10-01 10:10:10
Expiry: 2h
Generated:
hello_world.proto
// --snip--
option (tableau.workbook) = {name:"HelloWorld.yaml"};
message ItemConf {
option (tableau.worksheet) = {name:"ItemConf"};
Item item = 1 [(tableau.field) = {name:"Item"}];
message Item {
uint32 id = 1 [(tableau.field) = {name:"ID"}];
google.protobuf.Timestamp start_time = 2 [(tableau.field) = {name:"StartTime"}];
google.protobuf.Duration expiry = 3 [(tableau.field) = {name:"Expiry"}];
}
Item new_item = 2 [(tableau.field) = {name:"NewItem"}];
}
ItemConf.json
{
"item": {
"id": 1,
"startTime": "2024-10-01T02:10:10Z",
"expiry": "3600s"
},
"newItem": {
"id": 2,
"startTime": "2026-10-01T02:10:10Z",
"expiry": "7200s"
}
}
Predefined struct
Item
in common.proto is predefined as:
message Item {
int32 id = 1 [(tableau.field) = {name:"ID"}];
int32 num = 2 [(tableau.field) = {name:"Num"}];
}
A worksheet ItemConf
in HelloWorld.yaml:
# define metasheet: generate all sheets
"@sheet": "@TABLEAU"
---
# define schema
"@sheet": "@ItemConf"
Item: "{.Item}"
---
"@sheet": ItemConf
Item:
ID: 1
Num: 10
Generated:
hello_world.proto
// --snip--
import "common.proto";
option (tableau.workbook) = {name:"HelloWorld.yaml"};
message ItemConf {
option (tableau.worksheet) = {name:"ItemConf"};
protoconf.Item item = 1 [(tableau.field) = {name:"Item"}];
}
ItemConf.json
{
"item": {
"id": 1,
"num": 10
}
}
Incell struct
A worksheet ItemConf
in HelloWorld.yaml:
# define metasheet: generate all sheets
"@sheet": "@TABLEAU"
---
# define schema
"@sheet": "@ItemConf"
Item: "{uint32 ID, int32 Num}Item"
---
"@sheet": ItemConf
Item: "1, 10"
Generated:
hello_world.proto
// --snip--
option (tableau.workbook) = {name:"HelloWorld.yaml"};
message ItemConf {
option (tableau.worksheet) = {name:"ItemConf"};
Item item = 1 [(tableau.field) = {name:"Item" span:SPAN_INNER_CELL}];
message Item {
uint32 id = 1 [(tableau.field) = {name:"ID"}];
int32 num = 2 [(tableau.field) = {name:"Num"}];
}
}
ItemConf.json
{
"item": {
"id": 1,
"num": 10
}
}
Incell general struct
A worksheet ItemConf
in HelloWorld.yaml:
# define metasheet: generate all sheets
"@sheet": "@TABLEAU"
---
# define schema
"@sheet": "@ItemConf"
Item:
"@type": "{Item}"
"@incell": true
ID: uint32
Num: int32
---
"@sheet": ItemConf
Item: "1, 10"
Generated:
hello_world.proto
// --snip--
option (tableau.workbook) = {name:"HelloWorld.yaml"};
message ItemConf {
option (tableau.worksheet) = {name:"ItemConf"};
Item item = 1 [(tableau.field) = {name:"Item" span:SPAN_INNER_CELL}];
message Item {
uint32 id = 1 [(tableau.field) = {name:"ID"}];
int32 num = 2 [(tableau.field) = {name:"Num"}];
}
}
ItemConf.json
{
"item": {
"id": 1,
"num": 10
}
}
Incell predefined struct
Item
in common.proto is predefined as:
message Item {
int32 id = 1 [(tableau.field) = {name:"ID"}];
int32 num = 2 [(tableau.field) = {name:"Num"}];
}
A worksheet ItemConf
in HelloWorld.yaml:
# define metasheet: generate all sheets
"@sheet": "@TABLEAU"
---
# define schema
"@sheet": "@ItemConf"
Item:
"@type": "{.Item}"
"@incell": true
---
"@sheet": ItemConf
Item: "1, 10"
Generated:
hello_world.proto
// --snip--
import "common.proto";
option (tableau.workbook) = {name:"HelloWorld.yaml"};
message ItemConf {
option (tableau.worksheet) = {name:"ItemConf"};
protoconf.Item item = 1 [(tableau.field) = {name:"Item" span:SPAN_INNER_CELL}];
}
ItemConf.json
{
"item": {
"id": 1,
"num": 10
}
}