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

update strings service

parent 516c4f0b
use diesel_derives::Queryable; 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)] #[diesel(table_name = datas)]
pub struct CardDatas { pub struct CardDatas {
pub id: i64, pub id: i64,
...@@ -17,7 +17,7 @@ pub struct CardDatas { ...@@ -17,7 +17,7 @@ pub struct CardDatas {
} }
// TODO: 这里字段应该命名得更清晰一点 // 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)] #[diesel(table_name = texts)]
pub struct CardTexts { pub struct CardTexts {
pub id: i64, pub id: i64,
...@@ -40,3 +40,27 @@ pub struct CardTexts { ...@@ -40,3 +40,27 @@ pub struct CardTexts {
pub str15: Option<String>, pub str15: Option<String>,
pub str16: 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 { ...@@ -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 struct CardMeta {
pub id: i64, pub id: i64,
pub data: db::CardDatas, pub data: db::CardDatas,
......
//! TODO: 这里应该做依赖注入来实现服务之间调用
mod cards; mod cards;
mod deck; mod deck;
mod strings; 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 deck::service as deck_service;
pub use strings::{service_maker as strings_service, strings_conf_reader}; pub use strings::{service_maker as strings_service, strings_conf_reader};
use super::{cards_service, CardMeta};
use std::{ use std::{
collections::HashMap, collections::HashMap,
fs::File, fs::File,
...@@ -14,10 +15,22 @@ pub fn service_maker(strings_manager: StringsManager) -> impl Fn(String) -> Stri ...@@ -14,10 +15,22 @@ pub fn service_maker(strings_manager: StringsManager) -> impl Fn(String) -> Stri
let (r#type, code) = param.split_once('_').unwrap_or_default(); let (r#type, code) = param.split_once('_').unwrap_or_default();
let code = code.parse::<i64>().unwrap_or_default(); let code = code.parse::<i64>().unwrap_or_default();
strings_manager if r#type == "!card" {
.get(r#type) let code = (code >> 4) & 0x0fffffff;
.map_or(Some("".to_string()), |hash| hash.get(&code).cloned()) let offset = code & 0xf;
.unwrap_or_default()
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()
}
} }
} }
......
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