Rust入门实战 编写Minecraft启动器#3解析资源配置

首发于Enaium的个人博客


在上一篇文章中,我们已经建立了资源模型,接下来我们需要解析游戏的配置文件。

首先我们添加serde_json依赖和model依赖。

model = { path = "../model" }
serde_json = "1.0"

之后我们在lib.rs中添加解析的trait

pub trait Parse<T>: Sized {
   
    type Error;
    fn parse(value: T) -> Result<Self, Self::Error>;
}

之后将所有的model都实现这个trait,并测试它们。这里其实只用将需要手动解析的实现这个trait,其他的会在我们用reqwest下载的时候自动解析。

asset.rs

use model::asset::*;

use crate::Parse;

impl Parse<&str> for AssetIndex {
   
    type Error = serde_json::Error;

    fn parse(value: &str) -> Result<Self, Self::Error> {
   
        serde_json::from_str::<AssetIndex>(value)
    }
}

impl Parse<&str> for Index {
   
    type Error = serde_json::Error;

    fn parse(value: &str) -> Result<Self, Self::Error> {
   
        serde_json::from_str::<Index>(value)
    }
}

impl Parse<&str> for Object {
   
    type Error = serde_json::Error;

    fn parse(value: &str) -> Result<Self, Self::Error> {
   
        serde_json::from_str::<Object>(value)
    }
}

#[cfg(test)]
mod tests {
   

    use super::*;

    #[test]
    fn test_asset_index() {
   
        let asset_index = AssetIndex::parse(
        r#"{"id": "17", "sha1": "fab15439bdef669e389e25e815eee8f1b2aa915e", "size": 447033, "totalSize": 799252591, "url": "https://piston-meta.mojang.com/v1/packages/fab15439bdef669e389e25e815eee8f1b2aa915e/17.json"}"#).unwrap_or_else(|err| panic!("{:?}",err));
        assert_eq!("17", asset_index.id);
        assert_eq!("fab15439bdef669e389e25e815eee8f1b2aa915e", asset_index.sha1);
        assert_eq!(447033, asset_index.size);
        assert_eq!(799252591, asset_index.total_size);
        assert_eq!("https://piston-meta.mojang.com/v1/packages/fab15439bdef669e389e25e815eee8f1b2aa915e/17.json", asset_index.url);
    }

    #[test]
    fn test_index() {
   
        let index = Ind
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Enaium

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值