Worked on parsing
This commit is contained in:
24
Cargo.lock
generated
24
Cargo.lock
generated
@@ -2057,18 +2057,28 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.219"
|
version = "1.0.228"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6"
|
checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
|
||||||
|
dependencies = [
|
||||||
|
"serde_core",
|
||||||
|
"serde_derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_core"
|
||||||
|
version = "1.0.228"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_derive"
|
||||||
version = "1.0.219"
|
version = "1.0.228"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00"
|
checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@@ -2077,14 +2087,15 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_json"
|
name = "serde_json"
|
||||||
version = "1.0.141"
|
version = "1.0.145"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "30b9eff21ebe718216c6ec64e1d9ac57087aad11efc64e32002bce4a0d4c03d3"
|
checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itoa",
|
"itoa",
|
||||||
"memchr",
|
"memchr",
|
||||||
"ryu",
|
"ryu",
|
||||||
"serde",
|
"serde",
|
||||||
|
"serde_core",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -2309,6 +2320,7 @@ dependencies = [
|
|||||||
"reqwest",
|
"reqwest",
|
||||||
"scraper",
|
"scraper",
|
||||||
"serde",
|
"serde",
|
||||||
|
"serde_json",
|
||||||
"thiserror 2.0.12",
|
"thiserror 2.0.12",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tracing",
|
"tracing",
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ rand = "0.9.2"
|
|||||||
reqwest = "0.12.22"
|
reqwest = "0.12.22"
|
||||||
scraper = "0.24.0"
|
scraper = "0.24.0"
|
||||||
serde = { version = "1.0.219", features = ["derive"] }
|
serde = { version = "1.0.219", features = ["derive"] }
|
||||||
|
serde_json = "1.0.145"
|
||||||
thiserror = "2.0.12"
|
thiserror = "2.0.12"
|
||||||
tokio = { version = "1.46.1", features = ["rt"] }
|
tokio = { version = "1.46.1", features = ["rt"] }
|
||||||
tracing = { version = "0.1.41", default-features = false, features = ["std"] }
|
tracing = { version = "0.1.41", default-features = false, features = ["std"] }
|
||||||
|
|||||||
@@ -45,14 +45,14 @@ impl TryFrom<&str> for DanceRole {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(serde::Deserialize, Debug, PartialEq, Eq, PartialOrd, Ord)]
|
#[derive(serde::Deserialize, Debug, PartialEq, Eq, PartialOrd, Ord, Clone, Copy)]
|
||||||
pub enum DanceRank {
|
pub enum DanceRank {
|
||||||
Newcomer,
|
Newcomer,
|
||||||
Novice,
|
Novice,
|
||||||
Intermediate,
|
Intermediate,
|
||||||
#[serde(rename = "Advance")]
|
#[serde(rename = "Advance")]
|
||||||
Advanced,
|
Advanced,
|
||||||
#[serde(rename = "All Star")]
|
#[serde(rename = "All Star", alias = "All-Stars")]
|
||||||
AllStars,
|
AllStars,
|
||||||
Champions,
|
Champions,
|
||||||
}
|
}
|
||||||
@@ -70,33 +70,6 @@ impl DanceRank {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
pub struct ParseDanceRankError;
|
|
||||||
|
|
||||||
impl fmt::Display for ParseDanceRankError {
|
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
|
||||||
write!(f, "failed to parse DanceRank")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl std::error::Error for ParseDanceRankError {}
|
|
||||||
|
|
||||||
impl std::str::FromStr for DanceRank {
|
|
||||||
type Err = ParseDanceRankError;
|
|
||||||
|
|
||||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
|
||||||
match s {
|
|
||||||
"Newcomer" => Ok(Self::Newcomer),
|
|
||||||
"Novice" => Ok(Self::Novice),
|
|
||||||
"Intermediate" => Ok(Self::Intermediate),
|
|
||||||
"Advanced" => Ok(Self::Advanced),
|
|
||||||
"All-Stars" => Ok(Self::AllStars),
|
|
||||||
"Champions" => Ok(Self::Champions),
|
|
||||||
_ => Err(ParseDanceRankError),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct CompState {
|
pub struct CompState {
|
||||||
pub rank: DanceRank,
|
pub rank: DanceRank,
|
||||||
|
|||||||
@@ -61,12 +61,12 @@ fn parse_stats(d: &[Vec<String>]) {
|
|||||||
(a, b)
|
(a, b)
|
||||||
});
|
});
|
||||||
|
|
||||||
let (all_time, rest) = chapters.partition::<Vec<_>, _>(|(a, b)| a.to_lowercase() == "all time");
|
let (all_time, rest) = chapters.partition::<Vec<_>, _>(|(a, _)| a.to_lowercase() == "all time");
|
||||||
let all_time = &all_time.split_first().unwrap().0.1;
|
let all_time = &all_time.split_first().unwrap().0.1;
|
||||||
let sorted_chapters = rest
|
let mut sorted_chapters = rest
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|(chapter, items)| {
|
.map(|(chapter, items)| {
|
||||||
let rank = DanceRank::from_str(chapter).map_err(|_| chapter.to_owned())?;
|
let rank: DanceRank = serde_json::from_str(chapter).map_err(|_| chapter.to_owned())?;
|
||||||
Ok::<(DanceRank, Vec<[&String; 2]>), String>((rank, items))
|
Ok::<(DanceRank, Vec<[&String; 2]>), String>((rank, items))
|
||||||
})
|
})
|
||||||
.filter_map(|v| match v {
|
.filter_map(|v| match v {
|
||||||
@@ -77,7 +77,27 @@ fn parse_stats(d: &[Vec<String>]) {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
dbg!(&sorted_chapters);
|
sorted_chapters.sort_by_key(|(a, _)| *a);
|
||||||
|
sorted_chapters.reverse();
|
||||||
|
let leader_rank = sorted_chapters.iter().find_map(|(rank, items)| {
|
||||||
|
items
|
||||||
|
.iter()
|
||||||
|
.find(|[a, _]| a.to_lowercase().contains("points leader"))
|
||||||
|
.map(|[_, points]| (rank, points))
|
||||||
|
});
|
||||||
|
let follower_rank = sorted_chapters.iter().find_map(|(rank, items)| {
|
||||||
|
items
|
||||||
|
.iter()
|
||||||
|
.find(|[a, _]| a.to_lowercase().contains("points follower"))
|
||||||
|
.map(|[_, points]| (rank, points))
|
||||||
|
});
|
||||||
|
let primary_role = all_time.iter().find_map(|[key, value]| {
|
||||||
|
if !key.to_lowercase().contains("primary role") {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
Some(value)
|
||||||
|
});
|
||||||
|
dbg!(leader_rank, follower_rank, primary_role);
|
||||||
// dbg!(chapters.collect::<Vec<_>>());
|
// dbg!(chapters.collect::<Vec<_>>());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user