Add links.proto and backend module

This commit is contained in:
RumovZ 2021-07-22 10:05:38 +02:00
parent 80264c3b56
commit 55e1f178ef
5 changed files with 89 additions and 0 deletions

View file

@ -24,6 +24,7 @@ enum ServiceIndex {
SERVICE_INDEX_I18N = 12;
SERVICE_INDEX_COLLECTION = 13;
SERVICE_INDEX_CARDS = 14;
SERVICE_INDEX_LINKS = 15;
}
message BackendInit {

38
proto/anki/links.proto Normal file
View file

@ -0,0 +1,38 @@
// Copyright: Ankitects Pty Ltd and contributors
// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
syntax = "proto3";
package anki.links;
import "anki/generic.proto";
service LinksService {
rpc HelpPageLink(HelpPageLinkRequest) returns (generic.String);
}
message HelpPageLinkRequest {
enum HelpPage {
NOTE_TYPE = 0;
BROWSING = 1;
BROWSING_FIND_AND_REPLACE = 2;
BROWSING_NOTES_MENU = 3;
KEYBOARD_SHORTCUTS = 4;
EDITING = 5;
ADDING_CARD_AND_NOTE = 6;
ADDING_A_NOTE_TYPE = 7;
LATEX = 8;
PREFERENCES = 9;
INDEX = 10;
TEMPLATES = 11;
FILTERED_DECK = 12;
IMPORTING = 13;
CUSTOMIZING_FIELDS = 14;
DECK_OPTIONS = 15;
EDITING_FEATURES = 16;
}
oneof page {
HelpPage variant = 1;
string literal = 2;
}
}

View file

@ -0,0 +1,46 @@
// Copyright: Ankitects Pty Ltd and contributors
// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
use super::Backend;
pub(super) use crate::backend_proto::links_service::Service as LinksService;
use crate::{
backend_proto as pb,
backend_proto::links::help_page_link_request::{HelpPage as ProtoHelpPage, Page},
links::{help_page_link, help_page_link_from_str, HelpPage},
prelude::*,
};
impl LinksService for Backend {
fn help_page_link(&self, input: pb::HelpPageLinkRequest) -> Result<pb::String> {
Ok(match input.page {
Some(Page::Variant(var)) => help_page_link(var.into()),
Some(Page::Literal(s)) => help_page_link_from_str(&s),
None => help_page_link_from_str(""),
}
.into())
}
}
impl From<i32> for HelpPage {
fn from(page: i32) -> Self {
match ProtoHelpPage::from_i32(page).unwrap_or(ProtoHelpPage::Index) {
ProtoHelpPage::NoteType => HelpPage::Notetype,
ProtoHelpPage::Browsing => HelpPage::Browsing,
ProtoHelpPage::BrowsingFindAndReplace => HelpPage::BrowsingFindAndReplace,
ProtoHelpPage::BrowsingNotesMenu => HelpPage::BrowsingNotesMenu,
ProtoHelpPage::KeyboardShortcuts => HelpPage::KeyboardShortcuts,
ProtoHelpPage::Editing => HelpPage::Editing,
ProtoHelpPage::AddingCardAndNote => HelpPage::AddingCardAndNote,
ProtoHelpPage::AddingANoteType => HelpPage::AddingNotetype,
ProtoHelpPage::Latex => HelpPage::Latex,
ProtoHelpPage::Preferences => HelpPage::Preferences,
ProtoHelpPage::Index => HelpPage::Index,
ProtoHelpPage::Templates => HelpPage::Templates,
ProtoHelpPage::FilteredDeck => HelpPage::FilteredDeck,
ProtoHelpPage::Importing => HelpPage::Importing,
ProtoHelpPage::CustomizingFields => HelpPage::CustomizingFields,
ProtoHelpPage::DeckOptions => HelpPage::DeckOptions,
ProtoHelpPage::EditingFeatures => HelpPage::EditingFeatures,
}
}
}

View file

@ -15,6 +15,7 @@ mod decks;
mod error;
mod generic;
mod i18n;
mod links;
mod media;
mod notes;
mod notetypes;
@ -44,6 +45,7 @@ use self::{
deckconfig::DeckConfigService,
decks::DecksService,
i18n::I18nService,
links::LinksService,
media::MediaService,
notes::NotesService,
notetypes::NotetypesService,
@ -132,6 +134,7 @@ impl Backend {
pb::ServiceIndex::Stats => StatsService::run_method(self, method, input),
pb::ServiceIndex::Search => SearchService::run_method(self, method, input),
pb::ServiceIndex::I18n => I18nService::run_method(self, method, input),
pb::ServiceIndex::Links => LinksService::run_method(self, method, input),
pb::ServiceIndex::Collection => CollectionService::run_method(self, method, input),
pb::ServiceIndex::Cards => CardsService::run_method(self, method, input),
})

View file

@ -22,6 +22,7 @@ protobuf!(deckconfig);
protobuf!(decks);
protobuf!(generic);
protobuf!(i18n);
protobuf!(links);
protobuf!(media);
protobuf!(notes);
protobuf!(notetypes);