包括_str!设置“字符串文字”路径

2024-03-11

我必须运送一个json and a toml我的 Rust 二进制文件中的文件。它是一个独立的应用程序,人们不想在运行时传递配置文件。

include_str!做我想做的事。我可以写:

static SETTINGS_FILE_STR: &str = include_str!(r"../my_config/settings.toml");

有没有比写文件路径更好的方法r"../my_config/settings.toml"?

我似乎无法构建一个string literal从里面的任何东西use std::path::{Path, PathBuf}; or env。我想知道我是否可以从中读到一些东西cargo.toml文件。没有运气。

我总是打:

error: argument must be a string literal
  --> src/main.rs:23:42
   |
23 | static SETTINGS_STR: &str = include_str!(FANCY_PATH_TO_TOML_FILE);
   |                                          ^^^^^^^^^^^^

我无法执行以下操作,因为String不是一个字符串字面量:

fn get_config_path() -> String  {
    let root_dir = project_root::get_project_root().with_context(|| format!("Failed to get project root directory"))?;
    const path: PathBuf = root_dir.join("my_config/settings.toml");
    path.to_string()
}

如果这是 C / Objective-C,我可以使用构造函数或类函数来实现我想要的。正如您可能已经猜到的,我是 Rust 新手。


include_str!是一个宏,因此在编译时执行。因为编译器还不知道该内容是什么String或者运行时的一些静态变量,你不能使用include_str! with a String或静态变量。

但是,有一种解决方法可以引用相对于您的板条箱根目录的文件:您可以组合env! https://doc.rust-lang.org/std/macro.env.html and concat! https://doc.rust-lang.org/std/macro.concat.html with 环境变量CARGO_MANIFEST_DIR https://doc.rust-lang.org/cargo/reference/environment-variables.html(由 Cargo 在编译时设置)做你想做的事。两个宏都发出字符串文字,所以include_str!和他们在一起很开心。

这输出的内容my_config/settings.toml在你的板条箱根内:

static SETTINGS_STR: &str = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/my_config/settings.toml"));

fn main() {
    println!("The config: {}", SETTINGS_STR);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

包括_str!设置“字符串文字”路径 的相关文章

随机推荐

  • 导出的 Google+ 照片,如何将 JSON 数据转换为 EXIF?

    最近使用 Google Takeout 从 Google 下载了 60GB 以上的照片和视频 这会产生大量文件 但有价值的元数据 包括照片的原始日期和位置 通常存储在每个相册的单独的metadata json 文件中 而不是存储在 EXIF
  • 如何使用 Odata Dynamics NAV 2017 Web 服务删除记录

    我开发了一个连接到 Microsoft Dynamics NAV 2017 OData Web 服务的 php 应用程序 我可以毫无问题地读取 GET 和创建 POST 但对于删除 我收到错误 405 微软说可以删除 https msdn
  • 无状态和有状态 Enterprise Java Bean

    我正在阅读 Java EE 6 教程 并试图了解无状态会话 bean 和有状态会话 bean 之间的区别 如果无状态会话 Bean 在方法调用之间不保留其状态 为什么我的程序会这样运行 package mybeans import java
  • 将 AWT 图像转换为 SVG 图像

    我正在使用以下代码摄取 AWT 图像 从 PDF 通过 PDFBox private java awt Graphics2D graphics public void drawImage java awt Image awtImage ja
  • 从 Android 联系人列表中获取电子邮件

    如何在Android联系人中以编程方式获取选定人员的电子邮件ID 应该支持所有版本 我尝试过 people 类 但主要电子邮件方法已被弃用 提前致谢 Aswan 嘿阿斯旺 我从来没有这样做过 但可以给你想法 此代码让您了解如何将电子邮件添加
  • 如何将带有重音符号、变音符号等的字母转换为 Perl 中对应的 ASCII 字母?

    我正在编写一个与 Perl 中的文档一起使用的程序 许多文档都具有诸如 etc 大写和小写 我想将它们替换为 ASCII 对应项a o u e etc 我将如何在 Perl 中做到这一点 我想到的解决方案之一是使用一个散列 其中键是元音变音
  • 如何解决打字稿中隐式任何类型到索引类型错误?

    如何解决这个错误 元素隐式具有 any 类型 因为 any 类型的表达式不能用于索引类型 这个错误背后的原因是什么 什么是索引类型 代码如下 const getPast action gt const presentToPast appro
  • 在 php 中解压参数数组

    Python 提供了 运算符来解压元组列表并将它们作为参数提供给函数 如下所示 args 3 6 range args call with arguments unpacked from a list 这相当于 range 3 6 有谁知道
  • 带有圆形图像的 QLabel

    我想在 PyQt5 PySide2 应用程序中显示圆形图像 下面是我尝试过的代码 self statusWidget QLabel img QImage image jpg scaled 49 49 Qt IgnoreAspectRatio
  • theano中卷积神经网络的无监督预训练

    我想设计一个深度网络 其顶部有一个 或多个 卷积层 CNN 和一个或多个完全连接的隐藏层 对于具有完全连接层的深度网络 theano 中有一些方法可以进行无监督预训练 例如 使用去噪自动编码器 http www deeplearning n
  • 如何使用不同的pathdef同时运行两个MATLAB实例?

    我正在开发自己的脑成像工具箱 在 MATLAB SPM8 下运行 同时我有一个git clone我自己的工具箱代码目录 本地 git 存储库 的版本用于运行分析 此设置是根据 Kevin Reid 的回答创建的如何使用 git 同时处理多个
  • 尝试从 Windows 服务读取 IIS 站点的 web.config 文件

    我正在尝试寻找一个特别的web config安装在本地 IIS 上的网站的文件 我通过 Windows 服务进行此搜索 我执行以下操作 using ServerManager serverManager new ServerManager
  • Android 无法正确连接 MySQL 数据库

    我正在尝试了解从 MySQL 服务器发送和接收数据的 Android 应用程序的基础知识 我的实现与本学习示例无关 这是到目前为止的代码 package com davekelley polling import java io Buffe
  • 在 DQL 中加入并计数

    我有一个 MySQL 命令 但在 DQL 中找不到等效命令 我正在尝试获取评论最多的帖子列表 这是 MySQL 命令 SELECT posts id COUNT comments id AS num FROM posts LEFT JOIN
  • HP 强化 XML 外部实体注入

    Hp fortify 通过以下代码向我展示了 XML 外部实体注入 StringBuilder sb new StringBuilder StringWriter stringWriter new StringWriter sb xmlSe
  • 在android上显示圆形进度条(实心圆圈)

    如何在android上显示填充的圆形进度条 进度条应该像圆圈一样填充 而不是像环一样 并且应该具有可自定义的功能 例如动画计时动画插值器等 该项目有助于在 android 5 棒棒糖 及更高版本上显示一个简单的填充圆形进度条 它是高度可定制
  • 限制Socket io连接数

    是否可以限制nodejs中的套接字io连接数 我知道可以通过更改服务器 TCP 设置来配置限制 但我正在寻找一种在 nodejs 中执行此操作的方法 你可以很容易地实现它 var connectionsLimit 1 io on conne
  • Django/python 和 Apache Solr:pysolr 还是 solrpy?

    这个论坛是全新的 这是我的第一篇文章 在工作中 我们正在启动一个使用 Apache Solr 的项目 我负责前端系统 基于 Django 我们的 solr 数据库与任何其他数据库引擎或任何模型类都不相关 因此 Haystack 对我们不利
  • 使用node-http-proxy的默认路由?

    我想做一个简单的 Node js 反向代理来托管多个 Node JS 应用程序以及同一端口 80 上的 apache 服务器 所以我找到了这个示例here http nerdpress org 2012 04 20 hosting mult
  • 包括_str!设置“字符串文字”路径

    我必须运送一个json and a toml我的 Rust 二进制文件中的文件 它是一个独立的应用程序 人们不想在运行时传递配置文件 include str 做我想做的事 我可以写 static SETTINGS FILE STR str