feat(tazjin/predlozhnik): implement logic to restrict inputs

Change-Id: I3e5a5ba02b5f9fcaeeddb499e243ad3b55cf3d82
Reviewed-on: https://cl.tvl.fyi/c/depot/+/5981
Tested-by: BuildkiteCI
Reviewed-by: tazjin <tazjin@tvl.su>
This commit is contained in:
Vincent Ambo 2022-07-27 20:11:02 +03:00 committed by tazjin
parent d795a05c07
commit 7b217bbbe1

View file

@ -5,7 +5,7 @@ use maplit::hashmap;
use std::collections::HashMap; use std::collections::HashMap;
use std::fmt::Write; use std::fmt::Write;
#[derive(Debug, Hash, PartialEq, Eq)] #[derive(Clone, Copy, Debug, Hash, PartialEq, Eq)]
enum Падеж { enum Падеж {
Именительный, Именительный,
Родительный, Родительный,
@ -111,18 +111,72 @@ fn example_output() -> String {
out out
} }
struct Model(()); enum Сообщение {
ВыбралПадеж(Option<Падеж>),
ВыбралПредлог(Option<&'static str>),
}
impl Component for Model { #[derive(Default)]
type Message = (); struct Модель {
падеж: Option<Падеж>,
предлог: Option<&'static str>,
}
struct Вывод {
доступные_падежи: Vec<Падеж>,
доступные_предлоги: Vec<&'static str>,
объяснение: Option<Html>,
}
fn объяснить(падеж: Падеж, предлог: &str) -> Html {
html! {
{"NYI"}
}
}
fn ограничить(м: &Модель) -> Вывод {
match (м.падеж, &м.предлог) {
(Some(пж), Some(пл)) => Вывод {
доступные_падежи: vec![пж],
доступные_предлоги: vec![пл],
объяснение: Some(объяснить(пж, пл)),
},
(Some(пж), None) => Вывод {
доступные_падежи: vec![пж],
доступные_предлоги: (*ПОАДЕЖУ)[&пж].clone(),
объяснение: None,
},
(None, Some(пл)) => Вывод {
доступные_падежи: (*ПОРЕДЛОГУ)[пл].clone(),
доступные_предлоги: vec![пл],
объяснение: None,
},
(None, None) => Вывод {
доступные_падежи: vec![],
доступные_предлоги: vec![],
объяснение: None,
},
}
}
impl Component for Модель {
type Message = Сообщение;
type Properties = (); type Properties = ();
fn create(_ctx: &Context<Self>) -> Self { fn create(_ctx: &Context<Self>) -> Self {
Self(()) Default::default()
} }
fn update(&mut self, _ctx: &Context<Self>, _msg: Self::Message) -> bool { fn update(&mut self, _ctx: &Context<Self>, msg: Self::Message) -> bool {
false match msg {
Сообщение::ВыбралПадеж(пж) => self.падеж = пж,
Сообщение::ВыбралПредлог(пл) => self.предлог = пл,
}
true
} }
fn view(&self, _ctx: &Context<Self>) -> Html { fn view(&self, _ctx: &Context<Self>) -> Html {
@ -133,5 +187,5 @@ impl Component for Model {
} }
fn main() { fn main() {
yew::start_app::<Model>(); yew::start_app::<Модель>();
} }