rocalc 0.3.0

一款用于计算洛克王国:世界精灵对决的Rust库
Documentation
use csv::ReaderBuilder;
use serde::Deserialize;
use std::error::Error;
use crate::core::stat::Six;

/// 输入精灵的名字,获得种族值
pub fn get_race_value(name: &str, path: &str) -> Result<Six, Box<dyn Error>> {
    let mut rdr = ReaderBuilder::new().flexible(true).from_path(path)?;

    #[derive(serde::Deserialize)]
    struct SpriteRow {
        name: String,
        hp: f32,
        atk: f32,
        m_atk: f32,
        dfe: f32,
        m_dfe: f32,
        spd: f32,
    }

    // 2. 用替身去接住反序列化的数据
    let result = rdr
        .deserialize::<SpriteRow>()
        .filter_map(|result| result.ok())
        .find(|row| row.name == name)
        .map(|row| Six {
            hp: row.hp,
            atk: row.atk,
            m_atk: row.m_atk,
            dfe: row.dfe,
            m_dfe: row.m_dfe,
            spd: row.spd,
        });

    match result {
        Some(six) => Ok(six),
        None => Err(Box::from("没有找到精灵")),
    }
}