diff --git a/youmubot-osu/src/models/parse.rs b/youmubot-osu/src/models/parse.rs index ba6651a..0d17431 100644 --- a/youmubot-osu/src/models/parse.rs +++ b/youmubot-osu/src/models/parse.rs @@ -75,23 +75,26 @@ impl TryFrom for User { username: raw.username, joined: parse_date(&raw.join_date)?, country: raw.country, - count_300: parse_from_str(&raw.count300)?, - count_100: parse_from_str(&raw.count100)?, - count_50: parse_from_str(&raw.count50)?, - play_count: parse_from_str(&raw.playcount)?, - played_time: parse_duration(&raw.total_seconds_played)?, - ranked_score: parse_from_str(&raw.ranked_score)?, - total_score: parse_from_str(&raw.total_score)?, - count_ss: parse_from_str(&raw.count_rank_ss)?, - count_ssh: parse_from_str(&raw.count_rank_ssh)?, - count_s: parse_from_str(&raw.count_rank_s)?, - count_sh: parse_from_str(&raw.count_rank_sh)?, - count_a: parse_from_str(&raw.count_rank_a)?, - rank: parse_from_str(&raw.pp_rank)?, - country_rank: parse_from_str(&raw.pp_country_rank)?, - level: parse_from_str(&raw.level)?, - pp: Some(parse_from_str(&raw.pp_raw)?).filter(|v| *v != 0.0), - accuracy: parse_from_str(&raw.accuracy)?, + count_300: raw.count300.map(parse_from_str).unwrap_or(Ok(0))?, + count_100: raw.count100.map(parse_from_str).unwrap_or(Ok(0))?, + count_50: raw.count50.map(parse_from_str).unwrap_or(Ok(0))?, + play_count: raw.playcount.map(parse_from_str).unwrap_or(Ok(0))?, + played_time: raw + .total_seconds_played + .map(parse_duration) + .unwrap_or(Ok(Duration::from_secs(0)))?, + ranked_score: raw.ranked_score.map(parse_from_str).unwrap_or(Ok(0))?, + total_score: raw.total_score.map(parse_from_str).unwrap_or(Ok(0))?, + count_ss: raw.count_rank_ss.map(parse_from_str).unwrap_or(Ok(0))?, + count_ssh: raw.count_rank_ssh.map(parse_from_str).unwrap_or(Ok(0))?, + count_s: raw.count_rank_s.map(parse_from_str).unwrap_or(Ok(0))?, + count_sh: raw.count_rank_sh.map(parse_from_str).unwrap_or(Ok(0))?, + count_a: raw.count_rank_a.map(parse_from_str).unwrap_or(Ok(0))?, + rank: raw.pp_rank.map(parse_from_str).unwrap_or(Ok(0))?, + country_rank: raw.pp_country_rank.map(parse_from_str).unwrap_or(Ok(0))?, + level: raw.level.map(parse_from_str).unwrap_or(Ok(0.0))?, + pp: Some(raw.pp_raw.map(parse_from_str).unwrap_or(Ok(0.0))?).filter(|v| *v != 0.0), + accuracy: raw.accuracy.map(parse_from_str).unwrap_or(Ok(0.0))?, events: { let mut v = Vec::new(); for e in raw.events.into_iter() { diff --git a/youmubot-osu/src/models/raw.rs b/youmubot-osu/src/models/raw.rs index 70cf94e..641518f 100644 --- a/youmubot-osu/src/models/raw.rs +++ b/youmubot-osu/src/models/raw.rs @@ -46,24 +46,24 @@ pub(crate) struct User { pub user_id: String, pub username: String, pub join_date: String, - pub count300: String, - pub count100: String, - pub count50: String, - pub playcount: String, - pub ranked_score: String, - pub total_score: String, - pub pp_rank: String, - pub level: String, - pub pp_raw: String, - pub accuracy: String, - pub count_rank_ss: String, - pub count_rank_ssh: String, - pub count_rank_s: String, - pub count_rank_sh: String, - pub count_rank_a: String, pub country: String, - pub total_seconds_played: String, - pub pp_country_rank: String, + pub count300: Option, + pub count100: Option, + pub count50: Option, + pub playcount: Option, + pub ranked_score: Option, + pub total_score: Option, + pub pp_rank: Option, + pub level: Option, + pub pp_raw: Option, + pub accuracy: Option, + pub count_rank_ss: Option, + pub count_rank_ssh: Option, + pub count_rank_s: Option, + pub count_rank_sh: Option, + pub count_rank_a: Option, + pub total_seconds_played: Option, + pub pp_country_rank: Option, pub events: Vec, }