anki/proto/backend.proto
Damien Elmes 0087eee6d9 handle conditional replacement in Rust
This extends the existing Rust code to handle conditional
replacement. The replacement of field names and filters to text
remains in Python, so that add-ons can still define their own
field modifiers.

The code is currently running the old Pystache rendering and the
new implementation in parallel, and will print a message to the
console if they don't match. If you notice any problems, please
let me know.
2020-01-08 20:28:04 +10:00

150 lines
3.0 KiB
Protocol Buffer

syntax = "proto3";
package backend_proto;
message Empty {}
// 1-15 reserved for future use; 2047 for errors
message BackendInput {
reserved 2047;
oneof value {
TemplateRequirementsIn template_requirements = 16;
SchedTimingTodayIn sched_timing_today = 17;
Empty deck_tree = 18;
FindCardsIn find_cards = 19;
BrowserRowsIn browser_rows = 20;
FlattenTemplateIn flatten_template = 21;
PlusOneIn plus_one = 2046; // temporary, for testing
}
}
message BackendOutput {
oneof value {
TemplateRequirementsOut template_requirements = 16;
SchedTimingTodayOut sched_timing_today = 17;
DeckTreeOut deck_tree = 18;
FindCardsOut find_cards = 19;
BrowserRowsOut browser_rows = 20;
FlattenTemplateOut flatten_template = 21;
PlusOneOut plus_one = 2046; // temporary, for testing
BackendError error = 2047;
}
}
message BackendError {
oneof value {
InvalidInputError invalid_input = 1;
TemplateParseError template_parse = 2;
}
}
message InvalidInputError {
string info = 1;
}
message PlusOneIn {
int32 num = 1;
}
message PlusOneOut {
int32 num = 1;
}
message TemplateParseError {
string info = 1;
}
message TemplateRequirementsIn {
repeated string template_front = 1;
map<string, uint32> field_names_to_ordinals = 2;
}
message TemplateRequirementsOut {
repeated TemplateRequirement requirements = 1;
}
message TemplateRequirement {
oneof value {
TemplateRequirementAll all = 1;
TemplateRequirementAny any = 2;
Empty none = 3;
}
}
message TemplateRequirementAll {
repeated uint32 ords = 1;
}
message TemplateRequirementAny {
repeated uint32 ords = 1;
}
message SchedTimingTodayIn {
int64 created = 1;
int64 now = 2;
sint32 minutes_west = 3;
sint32 rollover_hour = 4;
}
message SchedTimingTodayOut {
uint32 days_elapsed = 1;
int64 next_day_at = 2;
}
message DeckTreeOut {
DeckTreeNode top = 1;
}
message DeckTreeNode {
// the components of a deck, split on ::
repeated string names = 1;
int64 deck_id = 2;
uint32 review_count = 3;
uint32 learn_count = 4;
uint32 new_count = 5;
repeated DeckTreeNode children = 6;
bool collapsed = 7;
}
message FindCardsIn {
string search = 1;
}
message FindCardsOut {
repeated int64 card_ids = 1;
}
message BrowserRowsIn {
repeated int64 card_ids = 1;
}
message BrowserRowsOut {
// just sort fields for proof of concept
repeated string sort_fields = 1;
}
message FlattenTemplateIn {
string template_text = 1;
repeated string nonempty_field_names = 2;
}
message FlattenTemplateOut {
repeated FlattenedTemplateNode nodes = 1;
}
message FlattenedTemplateNode {
oneof value {
string text = 1;
FlattenedTemplateReplacement replacement = 2;
}
}
message FlattenedTemplateReplacement {
string field_name = 1;
repeated string filters = 2;
}