impl FromStr for KeywordType

This commit is contained in:
Dmitry Belyaev 2022-08-25 16:12:47 +03:00
parent 7d17e904fc
commit 9eca2a68df
Signed by: b4tman
GPG Key ID: 41A00BF15EA7E5F3

View File

@ -8,6 +8,7 @@ use encoding::all::KOI8_R;
use encoding::DecoderTrap; use encoding::DecoderTrap;
use rayon::prelude::*; use rayon::prelude::*;
use std::path::PathBuf; use std::path::PathBuf;
use std::str::FromStr;
use std::{fs, io}; use std::{fs, io};
use textstream::TextReader; use textstream::TextReader;
@ -90,10 +91,12 @@ impl Context {
} }
} }
impl KeywordType { impl FromStr for KeywordType {
fn from(pattern: &str) -> KeywordType { type Err = ();
fn from_str(pattern: &str) -> Result<Self, Self::Err> {
use KeywordType::*; use KeywordType::*;
match pattern { Ok(match pattern {
"Мета:" => Ignore, "Мета:" => Ignore,
"Чемпионат:" | "Пакет:" => Global, "Чемпионат:" | "Пакет:" => Global,
"Тур:" => QuestionPre, "Тур:" => QuestionPre,
@ -102,7 +105,7 @@ impl KeywordType {
_ => CurrentScope, _ => CurrentScope,
// "URL:" | "Ссылка:" | "Дата:" | "Обработан:" | "Автор:" | "Редактор:" | "Копирайт:" | "Инфо:" | // "URL:" | "Ссылка:" | "Дата:" | "Обработан:" | "Автор:" | "Редактор:" | "Копирайт:" | "Инфо:" |
// "Тема:" | "Вид:" | "Тип:" | "Источник:" | "Рейтинг:" | "Комментарий:" | "Комментарии:" // "Тема:" | "Вид:" | "Тип:" | "Источник:" | "Рейтинг:" | "Комментарий:" | "Комментарии:"
} })
} }
} }
@ -152,7 +155,7 @@ fn parse_file(file: impl io::Read) -> Result<json::JsonValue, Box<dyn std::error
ctx.last_keyword_type = ctx.cur_keyword_type; ctx.last_keyword_type = ctx.cur_keyword_type;
ctx.last_tag = ctx.cur_tag.clone(); ctx.last_tag = ctx.cur_tag.clone();
ctx.cur_keyword_type = Some(KeywordType::from(pattern)); ctx.cur_keyword_type = Some(pattern.parse().unwrap());
ctx.cur_tag = pattern.replace(' ', "").replace(':', ""); ctx.cur_tag = pattern.replace(' ', "").replace(':', "");
// remember question id // remember question id