From 0312725624ac96a7b716a366becf35ee1a219996 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Mon, 28 Apr 2025 15:39:46 -0400 Subject: [PATCH] Extract Grand Company information --- src/data.rs | 5 +++-- src/parser.rs | 12 ++++++++++++ src/value.rs | 8 ++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/data.rs b/src/data.rs index 73443bb..b2d6a81 100644 --- a/src/data.rs +++ b/src/data.rs @@ -1,8 +1,8 @@ use serde::Serialize; use crate::value::{ - CityStateValue, ClassJobValue, GenderValue, GuardianValue, NamedayValue, RaceValue, TribeValue, - WorldValue, + CityStateValue, ClassJobValue, GenderValue, GrandCompanyValue, GuardianValue, NamedayValue, + RaceValue, TribeValue, WorldValue, }; #[derive(Default, Serialize)] @@ -52,6 +52,7 @@ pub struct CharacterData { pub gender: GenderValue, pub tribe: TribeValue, pub classjob_levels: Vec, + pub grand_company: GrandCompanyValue, #[serde(skip_serializing_if = "Option::is_none")] pub currencies: Option, diff --git a/src/parser.rs b/src/parser.rs index ffac03c..43eefd4 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -105,6 +105,18 @@ pub fn parse_lodestone(data: &str) -> CharacterData { char_data.guardian = GuardianValue::try_from(block_name.inner_html().as_str()).unwrap(); } + } else if name == "Grand Company" { + if let Some(block_name) = element + .select(&Selector::parse(CHARACTER_BLOCK_NAME_SELECTOR).unwrap()) + .nth(0) + { + let re = Regex::new(r"([^\/]+)\s\/\s([^\/]+)").unwrap(); + let inner_html = block_name.inner_html(); + let captures = re.captures(&inner_html).unwrap(); + + char_data.grand_company.name = captures.get(1).unwrap().as_str().to_string(); + char_data.grand_company.rank = captures.get(2).unwrap().as_str().to_string(); + } } } } diff --git a/src/value.rs b/src/value.rs index 684b83e..f918184 100644 --- a/src/value.rs +++ b/src/value.rs @@ -300,3 +300,11 @@ pub struct ClassJobValue { /// Level of the class or job. pub level: i32, } + +#[derive(Default, Serialize)] +pub struct GrandCompanyValue { + /// Name of the grand company. + pub name: String, + /// Name of your rank in the grand company. + pub rank: String, +}