Commit 8c0f9e0f authored by Chunchi Che's avatar Chunchi Che

update strings service

parent 516c4f0b
Pipeline #18803 failed with stages
in 2 minutes and 47 seconds
use diesel_derives::Queryable;
#[derive(serde::Serialize, Queryable, Clone, Debug, Default, PartialEq, Eq)]
#[derive(serde::Serialize, serde::Deserialize, Queryable, Clone, Debug, Default, PartialEq, Eq)]
#[diesel(table_name = datas)]
pub struct CardDatas {
pub id: i64,
......@@ -17,7 +17,7 @@ pub struct CardDatas {
}
// TODO: 这里字段应该命名得更清晰一点
#[derive(serde::Serialize, Queryable, Clone, Debug, Default, PartialEq, Eq)]
#[derive(serde::Serialize, serde::Deserialize, Queryable, Clone, Debug, Default, PartialEq, Eq)]
#[diesel(table_name = texts)]
pub struct CardTexts {
pub id: i64,
......@@ -40,3 +40,27 @@ pub struct CardTexts {
pub str15: Option<String>,
pub str16: Option<String>,
}
impl CardTexts {
pub fn get_str_by_offset(&self, offset: usize) -> Option<String> {
match offset {
1 => self.str1,
2 => self.str2,
3 => self.str3,
4 => self.str4,
5 => self.str5,
6 => self.str6,
7 => self.str7,
8 => self.str8,
9 => self.str9,
10 => self.str10,
11 => self.str11,
12 => self.str12,
13 => self.str13,
14 => self.str14,
15 => self.str15,
16 => self.str16,
_ => None,
}
}
}
......@@ -36,7 +36,7 @@ pub fn service(param: String) -> String {
}
}
#[derive(serde::Serialize, Default, Debug)]
#[derive(serde::Serialize, serde::Deserialize, Default, Debug)]
pub struct CardMeta {
pub id: i64,
pub data: db::CardDatas,
......
//! TODO: 这里应该做依赖注入来实现服务之间调用
mod cards;
mod deck;
mod strings;
pub use cards::service as cards_service;
pub use cards::{service as cards_service, CardMeta};
pub use deck::service as deck_service;
pub use strings::{service_maker as strings_service, strings_conf_reader};
use super::{cards_service, CardMeta};
use std::{
collections::HashMap,
fs::File,
......@@ -14,11 +15,23 @@ pub fn service_maker(strings_manager: StringsManager) -> impl Fn(String) -> Stri
let (r#type, code) = param.split_once('_').unwrap_or_default();
let code = code.parse::<i64>().unwrap_or_default();
if r#type == "!card" {
let code = (code >> 4) & 0x0fffffff;
let offset = code & 0xf;
let card = serde_json::from_str::<CardMeta>(cards_service(code.to_string()).as_str())
.unwrap_or_default();
card.text
.get_str_by_offset(offset as usize)
.unwrap_or_default()
} else {
strings_manager
.get(r#type)
.map_or(Some("".to_string()), |hash| hash.get(&code).cloned())
.unwrap_or_default()
}
}
}
pub fn strings_conf_reader(path: impl AsRef<Path>) -> anyhow::Result<StringsManager> {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment