Rust入门实战 编写Minecraft启动器#2建立资源模型

首发于Enaium的个人博客


我们需要声明几个结构体来存储游戏的资源信息,之后我们需要将json文件解析成这几个结构体,所以我们需要添加serde依赖。

serde = { version = "1.0", features = ["derive"] }

资源相关asset.rs

use serde::Deserialize;
use std::collections::HashMap;

#[derive(Deserialize)]
pub struct AssetIndex {
    pub id: String,
    pub sha1: String,
    pub size: u32,
    #[serde(alias = "totalSize")]
    pub total_size: u32,
    pub url: String,
}

#[derive(Deserialize)]
pub struct Index {
    pub objects: HashMap<String, Object>,
}

#[derive(Deserialize)]
pub struct Object {
    pub hash: String,
    pub size: u32,
}

游戏本体version.rs

use serde::Deserialize;

use crate::{asset::AssetIndex, library::Library};

pub type Libraries = Vec<Library>;

#[derive(Deserialize)]
pub struct Version {
    #[serde(alias = "assetIndex")]
    pub asset_index: AssetIndex,
    pub downloads: Download,
    pub id: String,
    pub libraries: Libraries,
    #[serde(alias = "mainClass")]
    pub main_class: String,
    #[serde(alias = "releaseTime")]
    pub release_time: String,
    pub time: String,
    #[serde(alias = "type")]
    pub type_: String,
}

#[derive(Deserialize)]
pub struct Download {
    pub client: Client,
}

#[derive(Deserialize)]
pub struct Client {
    pub sha1: String,
    pub size: u32,
    pub url: String,
}

游戏依赖库library.rs

use serde::Deserialize;

#[derive(Deserialize)]
pub struct Library {
    pub downloads: Download,
    pub name: String,
    pub rules: Option<Vec<Rule>>,
}

#[derive(Deserialize)]
pub struct Rule {
    pub action: String,
    pub os: Os,
}

#[derive(Deserialize)]
pub struct Os {
    pub name: String,
}

#[derive(Deserialize)]
pub struct Download {
    pub artifact: Artifact,
}

#[derive(Deserialize)]
pub struct Artifact {
    pub path: String,
    pub sha1: String,
    pub size: i32,
    pub url: String,
}

还有版本清单version_manifest.rs

use serde::Deserialize;

#[derive(Deserialize)]
pub struct VersionManifest {
    pub latest: Latest,
    pub versions: Vec<Version>,
}

#[derive(Deserialize)]
pub struct Latest {
    pub release: String,
    pub snapshot: String,
}

#[derive(Deserialize)]
pub struct Version {
    pub id: String,
    #[serde(alias = "type")]
    pub type_: String,
    pub url: String,
    pub time: String,
    #[serde(alias = "releaseTime")]
    pub release_time: String,
}

最后我们把这几个模块导入到lib.rs中。

pub mod asset;
pub mod library;
pub mod version;
pub mod version_manifest;

项目地址

相关推荐

  1. Rust入门实战 编写Minecraft启动器#2建立资源模型

    2024-07-10 03:24:03       9 阅读
  2. Rust入门实战 编写Minecraft启动器#3解析资源配置

    2024-07-10 03:24:03       8 阅读
  3. Rust入门2——随机数

    2024-07-10 03:24:03       36 阅读
  4. Rust编程入门教程

    2024-07-10 03:24:03       24 阅读
  5. Rust并发编程实践:10分钟入门系统级编程

    2024-07-10 03:24:03       17 阅读
  6. Rust编程-模式匹配

    2024-07-10 03:24:03       1 阅读
  7. Rust语言入门小结(第2篇)

    2024-07-10 03:24:03       38 阅读
  8. 掌握 Rust 中的建造模式

    2024-07-10 03:24:03       50 阅读
  9. Rust入门4——基本编程概念

    2024-07-10 03:24:03       33 阅读
  10. Rust语言入门:系统编程的未来

    2024-07-10 03:24:03       17 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 03:24:03       2 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 03:24:03       3 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 03:24:03       2 阅读
  4. Python语言-面向对象

    2024-07-10 03:24:03       2 阅读

热门阅读

  1. three.js利用着色器实现波浪效果

    2024-07-10 03:24:03       8 阅读
  2. Python pdfplumber库:轻松解析PDF文件

    2024-07-10 03:24:03       7 阅读
  3. 【必读】HTML中的BFC:10个你不知道的惊人事实

    2024-07-10 03:24:03       5 阅读
  4. C#——StringBuilder和string的区别与用法

    2024-07-10 03:24:03       7 阅读
  5. 《面向对象分析与设计》学习笔记1

    2024-07-10 03:24:03       9 阅读