文盘Rust -- 如何把配置文件打包到二进制文件里
在实际开发中,经常会遇到各种不同的配置文件。通常,程序运行的各种配置从外部读取,以增强应用配置的灵活性。java 生态中的 springboot 提供了这种设计的典范。springboot 的应用程序,默认通过 application.yml 加载配置。默认的 application.yml 文件打进 jar 包,如果想改变程序的行为,可以在jar 包的同级目录下创建 application.yml 文件或者通过参数指定配置文件位置。那么在 rust 生态里有没有办法把默认配置文件打包到二进制文件呢。
我们可以通过 [rust-embed](https://github.com/pyrossh/rust-embed) 第三方库来实现这一效果。
在实际开发中的典型场景是: 不指定任何配置文件时,使用默认配置文件;当应用程序同级目录下包含配置文件时加载该配置文件。
* 定义嵌入文件的位置及获取函数
src/resources/embed_resource.rs 中定义了嵌入文件的位置及获取函数
```rust use rust_embed::RustEmbed; #[derive(RustEmbed)] #[folder = "src/embedfiles/"] struct Asset; pub fn get_app_default() -> Option<rust_embed::EmbeddedFile> { Asset::get("./app_default.yml") } ```
宏定义了嵌入文件的目录 '#[folder = "src/embedfiles/"]',获取文件函数以该目录为根。
* 使用嵌入文件
```rust fn main() { if Path::new("./app.yml").exists() { let contents = fs::read_to_string("./app.yml").expect("Read file error!"); println!("{}", contents); return; } let app = get_app_default().unwrap(); let f = std::str::from_utf8(app.data.as_ref()).unwrap(); println!("{}", f); } ```
按照优先级,我们先检查应用同级目录下有没有app.yml文件,如果有就加载,否则加载默认配置文件。我们先前定义的获取嵌入文件的函数会返回rust_embed::EmbeddedFile 的 struct。通过解析该 struct 的 data 成员,获取文件内容。
* 测试
为了避免干扰,我们把编译好的应用 mv 到 /tmp 目录
```shell cargo build mv target/debug/embed /tmp ```
先执行 embed ,可以看到,输出的是默认配置文件的内容;在应用程序同级目录建立 app.yml 文件,随便填写些内容,再执行 embed 则输出的是 app.yml 文件的内容。
[源码地址](https://github.com/jiashiwen/wenpanrust/tree/main/embed)
以上示例在 macos 上编译执行通过,咱们下期见
作者:贾世闻

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
系统时间不够精确?试试RTC(实时时钟)
01 什么是 RTC? RTC(实时时钟)是 real time clock的简称,是一种计算机时钟,通常采用集成电路的形式,专门用于计时。自然地,它可以计算秒、分、小时、日、月甚至是年。RTC可以在个人计算机、嵌入式系统和服务器中找到,并且存在于任何可能需要精确计时的电子设备中。即使设备电源关闭,仍能通过电池或独立于系统的电源供电。 RTC 有哪些好处呢? 事实证明,RTC 比其他方法更精确——比如MCU的定时器。 它将主系统从时间紧迫的任务中解放出来。 它具有较低的功耗。 那么,如何在我们的OneOS中使用RTC呢,下面我们来一起操作一下吧。 02 工程配置及生成 以下配置均以万耦一代开发板(STML475)为例,配置硬件 RTC, 并生成工程。 Step 1 使用STM32CUBEMX配置硬件 1.打开 oneos\projects\xxxxx(project文件夹)\board\CubeMX_Config下 的 CUBE 工程文件(xxx.ioc); 2.在 CUBE 工程中进行 RTC 配置,如下图所示,红色框选中的地方依次选择RTC、勾选Activate Clock Sou...
- 下一篇
海外云主机的选择要注意什么?
当前,企业数字化转型是全球的热门趋势,数字化转型的基础依靠的是日益完善的云计算技术。而云计算产业链的基础设施则是云主机,它是云计算的重要组成部分。 云主机整合了计算、存储与网络资源,是数字化转型浪潮下的新一代高性能主机租用服务。它基于云计算模式的按需使用和按需付费,让用户通过 Web 界面的自助服务平台直接部署所需的服务器环境,能有效解决传统主机租用价格偏高、服务品质参差不齐的缺点,满足中小企业、个人站长用户对主机租用服务低成本,高可靠,易管理的需求。 但是对于海外业务而言,如果直接选择普通云主机,则会出现云主机与业务地区不匹配的问题,而线路不匹配又会引发速度慢、延迟高的情况,同时也不利于搜索引擎的排名。相反的,如果使用专门服务于海外业务的云主机,则可以将运用和数据布署在云自然环境中,提升资源访问效率。 不过需要注意的是,并不是任意海外云主机都能契合企业需求,所以企业在选择海外云主机时需要关注以下几点: 国际带宽 部署地域 服务性能 国际带宽 只要是进行数字传输的服务,带宽必然是需要关注的一点。它限定了服务的数据吞吐能力,决定了能够承载的请求量级,带宽越大每秒可传输的数据就越大。而海外...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Mario游戏-低调大师作品
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16