首发于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

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



