remote-party-finder/server/src/ffxiv.rs

65 lines
1.6 KiB
Rust
Raw Normal View History

2021-10-04 03:17:09 +00:00
pub mod auto_translate;
pub mod duties;
pub mod jobs;
pub mod roulettes;
pub mod territory_names;
pub mod treasure_maps;
2021-10-04 03:17:09 +00:00
pub mod worlds;
pub use self::{
auto_translate::AUTO_TRANSLATE,
duties::DUTIES,
jobs::JOBS,
roulettes::ROULETTES,
territory_names::TERRITORY_NAMES,
treasure_maps::TREASURE_MAPS,
2021-10-04 03:17:09 +00:00
worlds::WORLDS,
};
2021-10-10 15:39:45 +00:00
use std::{
cmp::Ordering,
str::FromStr,
};
#[derive(Debug)]
pub struct LocalisedText {
pub en: &'static str,
pub ja: &'static str,
pub de: &'static str,
pub fr: &'static str,
}
impl LocalisedText {
pub fn from_codes(&self, val: &str) -> &'static str {
let mut parts: Vec<(&str, f32)> = val.split(',')
.map(|part| {
let sub_parts: Vec<&str> = part.split(';').collect();
if sub_parts.len() == 1 {
(sub_parts[0], 1.0)
} else if let Ok(val) = f32::from_str(sub_parts[0]) {
(sub_parts[0], val)
} else {
(sub_parts[0], 0.0)
}
})
.collect();
parts.sort_unstable_by(|a, b| b.1.partial_cmp(&a.1).unwrap_or(Ordering::Less));
if parts.len() == 0 {
return self.en;
}
for (lang, _) in parts {
let first = lang.split('-').next().unwrap();
match first {
"en" => return self.en,
"ja" => return self.ja,
"de" => return self.de,
"fr" => return self.fr,
_ => {},
}
}
self.en
}
}