diff options
author | Vincent Ambo <mail@tazj.in> | 2022-07-27T17·11+0300 |
---|---|---|
committer | tazjin <tazjin@tvl.su> | 2022-07-27T21·54+0000 |
commit | 7b217bbbe1489840f015411c53d3b31401556b40 (patch) | |
tree | 77daa003d58f6b2bad53c5ddbd3afb7f7a7380cd /users/tazjin/predlozhnik/src | |
parent | d795a05c0719dd75b67327cb7cfdaaf6aded16dd (diff) |
feat(tazjin/predlozhnik): implement logic to restrict inputs r/4326
Change-Id: I3e5a5ba02b5f9fcaeeddb499e243ad3b55cf3d82 Reviewed-on: https://cl.tvl.fyi/c/depot/+/5981 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
Diffstat (limited to '')
-rw-r--r-- | users/tazjin/predlozhnik/src/main.rs | 70 |
1 files changed, 62 insertions, 8 deletions
diff --git a/users/tazjin/predlozhnik/src/main.rs b/users/tazjin/predlozhnik/src/main.rs index ba9eed25cbbd..bc4df154662a 100644 --- a/users/tazjin/predlozhnik/src/main.rs +++ b/users/tazjin/predlozhnik/src/main.rs @@ -5,7 +5,7 @@ use maplit::hashmap; use std::collections::HashMap; use std::fmt::Write; -#[derive(Debug, Hash, PartialEq, Eq)] +#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq)] enum Падеж { Именительный, Родительный, @@ -111,18 +111,72 @@ fn example_output() -> String { out } -struct Model(()); +enum Сообщение { + ВыбралПадеж(Option<Падеж>), + ВыбралПредлог(Option<&'static str>), +} + +#[derive(Default)] +struct Модель { + падеж: Option<Падеж>, + предлог: Option<&'static str>, +} -impl Component for Model { - type Message = (); +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 = (); fn create(_ctx: &Context<Self>) -> Self { - Self(()) + Default::default() } - fn update(&mut self, _ctx: &Context<Self>, _msg: Self::Message) -> bool { - false + fn update(&mut self, _ctx: &Context<Self>, msg: Self::Message) -> bool { + match msg { + Сообщение::ВыбралПадеж(пж) => self.падеж = пж, + Сообщение::ВыбралПредлог(пл) => self.предлог = пл, + } + + true } fn view(&self, _ctx: &Context<Self>) -> Html { @@ -133,5 +187,5 @@ impl Component for Model { } fn main() { - yew::start_app::<Model>(); + yew::start_app::<Модель>(); } |