compiling data!

main
Zynh0722 2024-02-01 23:49:42 -08:00
parent 06e600f5d4
commit 9c2049ed5e
4 changed files with 97 additions and 5 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
/target
/data

81
src/compile_data.rs Normal file
View File

@ -0,0 +1,81 @@
use std::str::FromStr;
use crate::raw_data::RawJobStats;
#[derive(Debug)]
pub enum Role {
Tank,
Healer,
Doh,
Dol,
Dps(DpsRole),
}
#[derive(Debug)]
pub enum DpsRole {
Melee,
Ranged,
Magic,
}
#[derive(Debug)]
pub struct JobStats {
pub role: Role,
pub is_blue_mage: bool,
pub level: u8,
pub starting_level: u8,
pub name: String,
}
fn get_starting_level(name: &str) -> anyhow::Result<u8> {
match name {
"Paladin" | "Warrior" | "Monk" | "Dragoon" | "Ninja" | "White Mage" | "Scholar"
| "Black Mage" | "Bard" | "Summoner" | "Blue Mage" | "Carpenter" | "Blacksmith"
| "Armorer" | "Goldsmith" | "Leatherworker" | "Weaver" | "Alchemist" | "Culinarian"
| "Miner" | "Botanist" | "Fisher" => Ok(0),
"Dark Knight" | "Astrologian" | "Machinist" => Ok(30),
"Gunbreaker" | "Dancer" => Ok(60),
"Samurai" | "Red Mage" => Ok(50),
"Reaper" | "Sage" => Ok(70),
_ => Err(anyhow::anyhow!("That's not a class")),
}
}
impl From<RawJobStats> for JobStats {
fn from(raw: RawJobStats) -> Self {
let name = raw.unlocked_state.name;
JobStats {
role: str::parse(&name).unwrap(),
is_blue_mage: name == "Blue Mage",
starting_level: get_starting_level(&name).unwrap(),
level: raw.level,
name,
}
}
}
impl FromStr for Role {
type Err = anyhow::Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
use DpsRole::*;
use Role::*;
match s {
"Paladin" | "Warrior" | "Dark Knight" | "Gunbreaker" => Ok(Tank),
"Monk" | "Dragoon" | "Ninja" | "Samurai" | "Reaper" => Ok(Dps(Melee)),
"White Mage" | "Scholar" | "Astrologian" | "Sage" => Ok(Healer),
"Bard" | "Machinist" | "Dancer" => Ok(Dps(Ranged)),
"Black Mage" => Ok(Dps(Magic)),
"Summoner" => Ok(Dps(Magic)),
"Red Mage" => Ok(Dps(Magic)),
"Blue Mage" => Ok(Dps(Magic)),
"Carpenter" | "Blacksmith" | "Armorer" | "Goldsmith" | "Leatherworker" | "Weaver"
| "Alchemist" | "Culinarian" => Ok(Doh),
"Miner" | "Botanist" | "Fisher" => Ok(Dol),
_ => Err(anyhow::anyhow!(
"Ooopsie Poopsie, dats not a weal cwass >.<"
)),
}
}
}

View File

@ -1,12 +1,22 @@
mod compile_data;
mod raw_data;
use crate::raw_data::JobStats;
use crate::compile_data::JobStats;
use crate::raw_data::RawJobStats;
use std::fs::File;
fn main() -> anyhow::Result<()> {
let raw: Vec<JobStats> = serde_json::from_reader(File::open("./29932586.json")?)?;
fn get_job_stats(lodestone_id: usize) -> anyhow::Result<Vec<JobStats>> {
let file = File::open(format!("./data/{lodestone_id}.json"))?;
let raw: Vec<RawJobStats> = serde_json::from_reader(file)?;
println!("{raw:#?}");
Ok(raw.into_iter().map(|r| r.into()).collect())
}
fn main() -> anyhow::Result<()> {
let stats = get_job_stats(29932586)?;
println!("{stats:#?}");
Ok(())
}

View File

@ -1,7 +1,7 @@
use serde::Deserialize;
#[derive(Deserialize, Debug)]
pub struct JobStats {
pub struct RawJobStats {
// TODO: is specialized
#[serde(rename = "Level")]
pub level: u8,