f7ff0d1c17
This is paving the way to move the standard filters into Rust. Non-empty fields are now determined in Rust, using a single regex instead of the overkill stripHTMLMedia(). The old implementation has been moved into the Pystache code for now.
151 lines
3.0 KiB
Protocol Buffer
151 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;
|
|
RenderTemplateIn render_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;
|
|
RenderTemplateOut render_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_secs = 1;
|
|
sint32 created_mins_west = 2;
|
|
int64 now_secs = 3;
|
|
sint32 now_mins_west = 4;
|
|
sint32 rollover_hour = 5;
|
|
}
|
|
|
|
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 RenderTemplateIn {
|
|
string template_text = 1;
|
|
map<string,string> fields = 2;
|
|
}
|
|
|
|
message RenderTemplateOut {
|
|
repeated RenderedTemplateNode nodes = 1;
|
|
}
|
|
|
|
message RenderedTemplateNode {
|
|
oneof value {
|
|
string text = 1;
|
|
RenderedTemplateReplacement replacement = 2;
|
|
}
|
|
}
|
|
|
|
message RenderedTemplateReplacement {
|
|
string field_name = 1;
|
|
repeated string filters = 2;
|
|
}
|