1 个不稳定版本

0.1.0 2022年4月4日

#485操作系统

21 每月下载次数
2 个 crates 中使用 (通过 niftygate-asset)

MIT 许可证

34KB
861

platform-path

这是什么?

platform-path 是一个小型工具(和库),它会告诉您(或您的程序)根据您运行的系统中的标准将东西放在哪里。

为什么会有这个存在?

因为它将特定领域的知识编码在可脚本化的工具中。它知道标准,所以您不需要。

每个平台都有一些标准(类似)的路径,它期望东西在那里。遵循这些标准可以改善用户体验和操作系统集成。

例如,在 macOS 上,缓存不包括在 iCloud 备份中,Spotlight 搜索中,当磁盘空间非常低时(当应用程序未运行时)可以自动清除,并且应该是“优化存储”实用程序的候选者。

在 Linux 上,使用 FlatPak 或 AppImage 安装的程序可能会使用特定的路径进行沙箱隔离。如果您的应用程序依赖于固定路径,则它可能不可写(甚至不可读),具体取决于沙箱策略。

在 Windows 上,漫游配置文件可能使用与本地配置文件不同的数据路径。

这只是几个例子。

platform-path 可以告诉您在哪里放置东西。

我如何获得这个伟大的工具?

cargo install platform-path

我如何使用它?

可以通过环境或命令行提供选项。以下示例假设一个名为 "DemoUser" 的 macOS 用户,以下环境

PROJECT_QUALIFIER="com.suse"
PROJECT_ORGANIZATION="SUSE Software Solutions"

首选项的基础目录是哪里?

$ platform-path print base preference

/Users/DemoUser/Library/Preferences

在哪里放置 NiftyGate 的缓存?

$ platform-path print project cache --project-application NiftyGate

/Users/DemoUser/Library/Caches/com.suse.SUSE-Software-Solutions.NiftyGate

应该将运行时文件(如套接字)存储在哪里?

platform-path print base runtime

Error: platform standard does not define requested directory

(错误写入到标准错误,退出状态是非零)

用户的下载文件夹在哪里?

$ platform-path print user download

/Users/DemoUser/Downloads

有关完整列表,请参阅内置的帮助。

platform-path --help

可选功能

有一些不太常见的功能默认未启用。

结构化输出

如果您出于某种原因想要结构化格式的输出,则可以构建带有 platform-pathjson 和/或 yaml 功能。

这将为 --format 选项添加一些变体。

HTTP 服务

如果您需要在壳输出不理想的环境中访问此信息,您可以使用带有 httphttps 功能的 platform-path

这将添加一个 serve 子命令,通过 HTTP(S) 暴露信息。

它是如何工作的(内部)?

内部,它依赖于一系列优秀的 crate 来处理所有复杂的事情,并围绕它们提供 CLI。

  • 命令行选项和参数解析由 clap(以及 structopt)提供。
  • 平台特定的标准知识由 directories 提供。
  • Unicode 路径验证由 camino 提供。
  • 结构化输出通常由 serde 提供,以及特定格式的 crate(如 serde_jsonserde_yaml)。
  • 各种故障场景都由单个 Error 类型(实现了 std::error::Error)捕获。
  • (可选)HTTP 服务使用 tide 构建。
  • 对于各种可能的失败方式,CLI 中都存在一个选项来以合理的方式处理它,例如
    • 如果平台标准未定义目录,则存在一个 --default 选项。
    • 一个 --unicode=enforced 选项来强制转换非 Unicode 路径。

许可证

platform-path 在 MIT 许可证下可用。有关完整文本,请参阅 LICENSE.txt

依赖关系

~3–19MB
~240K SLoC