当前位置: 首页 > news >正文

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;

项目地址

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 初阶C++(二)
  • AI赋能OFFICE 智能化办公利器!
  • Simulink生成代码时端口名称乱码问题
  • ChatGPT-4 对比 ChatGPT-3.5:有哪些优势
  • 有线网络台式电脑打游戏每天要断线几次又自动连接解决
  • LabVIEW从测试曲线中提取特征值
  • 自动化办公004—有效解决ChatGPT数学公式无法复制到Office、MarkDown的问题
  • Apache tika 实现各种文档内容解析
  • 科普文本分类背后的数学原理——最新版《数学之美》第14、15章读书笔记
  • 南方CASS:测绘工作者的得力助手
  • 发表EI会议论文-对考研生和研究生都有好处!
  • Mysql数据库两表连接进行各种操作
  • Python 如何实现数据驱动的接口自动化测试
  • 面壁智能发布端侧 AI 应用开发平台;快手推出肖像动画技术 LivePortrait丨 RTE 开发者日报
  • 【C++中resize和reserve的区别】
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • Android组件 - 收藏集 - 掘金
  • centos安装java运行环境jdk+tomcat
  • CSS 三角实现
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • javascript从右向左截取指定位数字符的3种方法
  • JS函数式编程 数组部分风格 ES6版
  • 从setTimeout-setInterval看JS线程
  • 关于List、List?、ListObject的区别
  • 聊聊flink的BlobWriter
  • 如何选择开源的机器学习框架?
  • 双管齐下,VMware的容器新战略
  • 微信支付JSAPI,实测!终极方案
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 新手搭建网站的主要流程
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 仓管云——企业云erp功能有哪些?
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • #QT(QCharts绘制曲线)
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (day18) leetcode 204.计数质数
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (STM32笔记)九、RCC时钟树与时钟 第二部分
  • (第30天)二叉树阶段总结
  • (二)WCF的Binding模型
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (强烈推荐)移动端音视频从零到上手(上)
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (四十一)大数据实战——spark的yarn模式生产环境部署
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转载)虚函数剖析
  • *算法训练(leetcode)第四十七天 | 并查集理论基础、107. 寻找存在的路径
  • .net Application的目录
  • .NET C# 使用GDAL读取FileGDB要素类